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(); } };