注意一些小细节:单引号是char类型,双引号是字符串类型。
class Solution {
public:
int evalRPN(vector<string>& tokens) {
stack<int>s;
int op1,op2;
for(int i=0;i<tokens.size();i++){
if(tokens[i]=='+'){
op2=s.top();s.pop();
op1=s.top();s.pop();
s.push(op1+op2);
}else if(tokens[i]=='-'){
op2=s.top();s.pop();
op1=s.top();s.pop();
s.push(op1-op2);
}else if(tokens[i]=='*'){
op2=s.top();s.pop();
op1=s.top();s.pop();
s.push(op1*op2);
}else if(tokens[i]=='/'){
op2=s.top();s.pop();
op1=s.top();s.pop();
s.push(op1/op2);
}else{
s.push(stoi(tokens[i]));
}
}
return s.top();
}
};
在逆波兰表达式的算法中,因为string类型的向量元素和单引号包裹的char类型opration比较,所以条件判等部分会语法报错。
no match for 'operator==' (operand types are '__gnu_cxx::__alloc_traits<std::allocator<std::__cxx11::basic_string<char> > >::value_type {aka std::__cxx11::basic_string<char>}' and 'char')