Nayeemzaman

Expression Evaluation

Feb 23rd, 2021
954
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. int priority(char c){
  4.     if(c=='*'||c=='/') return 1;
  5.     else return 0;
  6. }
  7. int output(int a, int b, char c){
  8.     if(c=='+')
  9.         return a+b;
  10.     else if(c=='-')
  11.         return a-b;
  12.     else if(c=='*')
  13.         return a*b;
  14.     else if(c=='/')
  15.         return a/b;
  16. }
  17. int evaluateEquation(string equ){
  18.     stack<int> numbers;
  19.     stack<char> opa;
  20.     int num=0;
  21.     for(int i=0;i<equ.size();i++){
  22.         if(equ[i]>='0'&&equ[i]<='9'){
  23.             num=num*10+(equ[i]-48);
  24.         }
  25.         else{
  26.             numbers.push(num);
  27.             num=0;
  28.             while(!opa.empty()&&priority(opa.top())>=priority(equ[i])){
  29.                 int b=numbers.top();
  30.                 numbers.pop();
  31.                 int a=numbers.top();
  32.                 numbers.pop();
  33.                 int res=output(a, b, opa.top());
  34.                 //cout<<res<<endl;
  35.                 opa.pop();
  36.                 numbers.push(res);
  37.             }
  38.             opa.push(equ[i]);
  39.         }
  40.     }
  41.     if(num!=0)
  42.         numbers.push(num);
  43.     while(!opa.empty()){
  44.         int b=numbers.top();
  45.         numbers.pop();
  46.         int a=numbers.top();
  47.         numbers.pop();
  48.         int res=output(a, b, opa.top());
  49.         opa.pop();
  50.         numbers.push(res);
  51.     }
  52.     return numbers.top();
  53. }
  54. int main(){
  55.     string equ;
  56.     cin>>equ;
  57.     cout<<evaluateEquation(equ)<<endl;
  58. }
  59.  
RAW Paste Data