sundeepblue
3/11/2014 - 7:11 PM

Evaluate Reverse Polish Notation

Evaluate Reverse Polish Notation

/*
The infix expression "5 + ((1 + 2) * 4) − 3" can be written down like this in RPN:
5 1 2 + 4 * + 3 -
*/
int evalRPN(vector<string> &tokens) {
    if(tokens.empty()) return 0;
    stack<int> stk;
    int i=0;
    while(i < tokens.size()) { // should be "9" not '9'
        if(tokens[i] != "+" && tokens[i] != "-" && tokens[i] != "*" && tokens[i] != "/")  
            stk.push(atoi(tokens[i].c_str()));
        else {
            int op1 = stk.top(); stk.pop();
            int op2 = stk.top(); stk.pop();
            char op = tokens[i];
            if(op == "+") stk.push(op2 + op1);       // op1 first, op1 second
            else if(op == "-") stk.push(op2 - op1);  // op2 first, op1 second
            else if(op == "*") stk.push(op2 * op1);
            else if(op == "/") stk.push(op2 / op1);
        }
        i++;
    }
    return stk.top();
}