Advertisement
Guest User

Untitled

a guest
Apr 7th, 2020
188
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.60 KB | None | 0 0
  1. #include <iostream>
  2. #include <fstream>
  3. #include <string> //funkcja stoi tego uzywa
  4. #include <regex>
  5. using namespace std;
  6. void dodaj(int a, int b) {
  7.     cout << "Wynik: " << a + b;
  8. }
  9. void odejmij(int a, int b) {
  10.     cout << "Wynik: " << a - b;
  11. }
  12. void pomnoz(int a, int b) {
  13.     cout << "Wynik: " << a * b;
  14. }
  15. void podziel(int a, int b) {
  16.     if (b != 0)
  17.         cout << "Wynik: " << (float)a / (float)b;
  18.     else {
  19.         cout << "Nie mozna dzielic przez 0";
  20.     }
  21. }
  22.  
  23. int main()
  24. {
  25.     string dzialanie;
  26.     while (1) {
  27.         cout<<endl << "Podaj dzialanie: ";
  28.         cin >> dzialanie;
  29.         // \\d liczba dziesietna * -ma wystapic 1 lub wiecej razy czyli np. 1 lub 34 lub 3452
  30.         // [+\\-*/] potem ma byc znak +, -, * lub /. Ten znak \\ jest tylko potrzebny zeby ten minus byl minusem
  31.         // \\d i potem znowu liczba dziesietna
  32.  
  33.         // sprawdz czy istnieje takie dopasowanie?
  34.         if (regex_match(dzialanie, regex("(\\d*[+\\-*/]\\d*)"))) {
  35.             smatch matches;
  36.  
  37.             //nawias to jedna grupa
  38.             // \\d liczba dziesietna - grupa nr. 1
  39.             // [+-/*] znak to grupa nr. 2
  40.             // \\d grupa nr. 3
  41.             if (regex_search(dzialanie, matches, regex("(\\d*)([+-/*])(\\d*)"))) {
  42.                 int a, b;
  43.                 string znak;
  44.                 //zerowa grupa to wszystko
  45.                 a = stoi(matches[1]); //pierwsza grupa: (\\d*) ; stoi - konwersja string do inta
  46.                 znak = matches[2]; //druga grupa: ([+-/*])
  47.                 b = stoi(matches[3]); //trzecia grupa: (\\d*)
  48.  
  49.                 if (znak == "+") dodaj(a, b);
  50.                 else if (znak == "-") odejmij(a, b);
  51.                 else if (znak == "*") pomnoz(a, b);
  52.                 else if (znak == "/")podziel(a, b);
  53.                 else cout << "Error!";
  54.             }
  55.         }
  56.         else
  57.             cout << "Niepoprawne dane!";
  58.     }
  59. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement