class Solution {
public:
    /*逆波兰表达式的解释器一般是基于堆栈的。
    解释过程一般是:操作数入栈;遇到操作符时,操作数出栈,求值,将结果入栈;
    当一遍后,栈顶就是表达式的值。*/
    int evalRPN(vector<string> &tokens) {
        stack<int> res;//创建栈
        for(auto x: tokens){//遍历每一个输入,注意是字符串类型
            if(x=="+" || x=="-" || x=="*" || x=="/"){//如果当前字符串是操作符
                if(res.size()<2) return 0;//如果栈内数字不足两个,即无法进行运算,则返回0
                int a=res.top();res.pop();//依次将栈内两个数字出栈进行操作运算
                int b=res.top();res.pop();
                int c=0;//用c表示每次运算的结果
                if(x=="+") c=b+a;
                if(x=="-") c=b-a;
                if(x=="*") c=b*a;
                if(x=="/") c=b/a;
                res.push(c);
            }
            else{//如果当前字符串是数字
                res.push(atoi(x.c_str()));//操作数入栈,注意先将string字符串转为char字符,再转为int数字
            }
        }
        return res.top();
        
    }
};