Untitled

 avatar
unknown
c_cpp
3 years ago
2.6 kB
11
Indexable
class Solution {
public:
    int convert(string a){
        int ans =0 ;  

        for(auto &i : a){
            int r = i-'0' ; 
            ans *= 10 ; 
            ans += r ; 
        }

        return ans ; 
    }

    int get( int a , int b , char c){
        if( c == '+') return b +a ; 
        else if( c == '-') return b-a ; 
        else if( c == '*') return b*a ;
        else return b/a ;  
    }

    int precedence(char c){
        if( c == '+') return 1 ; 
        else if( c == '-') return 1 ; 
        else if( c == '*') return 2 ;
        else return 2 ;  
    }
    int calculate(string s) {
       int n = s.size() ; 

       stack<char> st1 ; 
       stack<int> st2 ; 

       int i=0 ; 

       while(i < n){
           char c = s[i] ; 
           if(c == ' '){
               i +=1 ; 
               continue ;
     
           }else if(c >= '0' && c <= '9'){
               string a = "" ; 

               while(c >= '0' && c <= '9'){
                   a += c ; 
                   i +=1 ; 
               }

               int b = convert(a) ; 
               st2.push(b) ;

           }else if(c == '('){
               st1.push(c) ; 
               i += 1; 
           }else if(c == ')'){

               while(st1.top() != '('){
                   char ch = st1.top() ; 
                   st1.pop() ; 

                   int a = st2.top() ; 
                   st2.pop() ; 
                   int b = st2.top() ; 
                   st2.pop() ; 

                   int d = get(a ,b , ch) ; 
                   st2.push(d) ; 
               }

               st1.pop() ; 
               i += 1; 

           }else{
               while(st1.size() > 0  && st1.top() != '(' && precedence(c) <= precedence(st1.top())){
                   char ch = st1.top() ; 
                   st1.pop() ; 

                   int a = st2.top() ; 
                   st2.pop() ; 
                   int b = st2.top() ; 
                   st2.pop() ; 

                   int d = get(a ,b , ch) ; 
                   st2.push(d) ; 
               }

               st1.push(c) ; 
               i +=1 ;  
           }
       }

       while(st1.size() > 0){
           char ch = st1.top() ; 
           st1.pop() ; 
           int a = st2.top() ; 
           st2.pop() ; 
           int b = st2.top() ; 
           st2.pop() ; 
           int d = get(a ,b , ch) ; 
           st2.push(d) ; 
       }

       int ans = st2.top() ; 

       return ans ; 
    }
};
Editor is loading...