解题思路
逆波兰表达式:
1.需要一个栈存储操作数,遇到操作数把它入栈
2.遇到操作符,把数出栈,右操作数先出,左操作数后出,运算后再入栈
atoi()函数的功能:将字符串转换成整型数;
atoi()会扫描参数nptr字符串,跳过前面的空格字符,直到遇上数字或正负号才开始做转换,而再遇到非数字或字符串时(’\0’)才结束转化,并将结果返回(返回转换后的整型数)。
c_str():Borland封装的String类中的一个函数,它返回当前字符串的首字符地址
代码
class Solution {
public:
int evalRPN(vector<string>& tokens) {
stack<int> stk;
int n = tokens.size();
for(int i = 0;i < n;i++){
string& token = tokens[i];
if(isNumber(token)){
stk.push(atoi(token.c_str()));
}else{
int num2 = stk.top();
stk.pop();
int num1 = stk.top();
stk.pop();
switch(token[0]){
case '+':
stk.push(num1 + num2);
break;
case '-':
stk.push(num1 - num2);
break;
case '*':
stk.push(num1 * num2);
break;
case '/':
stk.push(num1 / num2);
break;
}
}
}
return stk.top();
}
bool isNumber(string& token){
return !(token == "+"||token == "-"||token == "*"|| token == "/");
}
};