vencinachev

K2-Zad2

May 31st, 2021 (edited)
330
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.56 KB | None | 0 0
  1. #include <iostream>
  2. #include <stack>
  3.  
  4. using namespace std;
  5.  
  6. int evaluate(const char* expr);
  7.  
  8. int main()
  9. {
  10.     //cout << evaluate("+(*(2,3), 4, +(4,5,6))") << endl;
  11.     char expr[100];
  12.     cout << "Enter expression: ";
  13.     cin.getline(expr, 100);
  14.     cout << "Result = " << evaluate(expr) << endl;
  15.     return 0;
  16. }
  17.  
  18. int evaluate(const char* expr)
  19. {
  20.     stack<int> stArguments;
  21.     stack<char> stOperations;
  22.  
  23.     while(*expr)
  24.     {
  25.         if (*expr == '+' || *expr == '*')
  26.         {
  27.             stOperations.push(*expr);
  28.         }
  29.         else if (*expr >= '0' && *expr <= '9')
  30.         {
  31.             stArguments.push(*expr - '0');
  32.         }
  33.         else if (*expr == '(')
  34.         {
  35.             stArguments.push('(');
  36.         }
  37.         else if (*expr == ')')
  38.         {
  39.             int result = 0;
  40.             if (stOperations.top() == '*')
  41.             {
  42.                 result = 1;
  43.                 while (!stArguments.empty() && stArguments.top() != '(')
  44.                 {
  45.                     result *= stArguments.top();
  46.                     stArguments.pop();
  47.                 }
  48.             }
  49.             if (stOperations.top() == '+')
  50.             {
  51.                 while (!stArguments.empty() && stArguments.top() != '(')
  52.                 {
  53.                     result += stArguments.top();
  54.                     stArguments.pop();
  55.                 }
  56.             }
  57.             stOperations.pop();
  58.             stArguments.pop(); // remove '('
  59.             stArguments.push(result);
  60.         }
  61.         expr++;
  62.     }
  63.     return stArguments.top();
  64. }
  65.  
Add Comment
Please, Sign In to add comment