Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <fstream>
- #include <string> //funkcja stoi tego uzywa
- #include <regex>
- using namespace std;
- void dodaj(int a, int b) {
- cout << "Wynik: " << a + b;
- }
- void odejmij(int a, int b) {
- cout << "Wynik: " << a - b;
- }
- void pomnoz(int a, int b) {
- cout << "Wynik: " << a * b;
- }
- void podziel(int a, int b) {
- if (b != 0)
- cout << "Wynik: " << (float)a / (float)b;
- else {
- cout << "Nie mozna dzielic przez 0";
- }
- }
- int main()
- {
- string dzialanie;
- while (1) {
- cout<<endl << "Podaj dzialanie: ";
- cin >> dzialanie;
- // \\d liczba dziesietna * -ma wystapic 1 lub wiecej razy czyli np. 1 lub 34 lub 3452
- // [+\\-*/] potem ma byc znak +, -, * lub /. Ten znak \\ jest tylko potrzebny zeby ten minus byl minusem
- // \\d i potem znowu liczba dziesietna
- // sprawdz czy istnieje takie dopasowanie?
- if (regex_match(dzialanie, regex("(\\d*[+\\-*/]\\d*)"))) {
- smatch matches;
- //nawias to jedna grupa
- // \\d liczba dziesietna - grupa nr. 1
- // [+-/*] znak to grupa nr. 2
- // \\d grupa nr. 3
- if (regex_search(dzialanie, matches, regex("(\\d*)([+-/*])(\\d*)"))) {
- int a, b;
- string znak;
- //zerowa grupa to wszystko
- a = stoi(matches[1]); //pierwsza grupa: (\\d*) ; stoi - konwersja string do inta
- znak = matches[2]; //druga grupa: ([+-/*])
- b = stoi(matches[3]); //trzecia grupa: (\\d*)
- if (znak == "+") dodaj(a, b);
- else if (znak == "-") odejmij(a, b);
- else if (znak == "*") pomnoz(a, b);
- else if (znak == "/")podziel(a, b);
- else cout << "Error!";
- }
- }
- else
- cout << "Niepoprawne dane!";
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement