需要注意的是 访问栈顶元素使用stack.top(), stack.pop()只是删除栈顶元素并不返回栈顶元素
class Solution {
public:
stack<int> dataStack;
void evalRPNHelper(string oPerator)
{
int a = 0;
int b = 0;
b = dataStack.top();
dataStack.pop();
a = dataStack.top();
dataStack.pop();
switch (oPerator.at(0))
{
case '/':
dataStack.push(a/b);
break;
case '*':
dataStack.push(a*b);
break;
case '+':
dataStack.push(a+b);
break;
case '-':
dataStack.push(a-b);
break;
default:
break;
}
}
void chartoint(string s)
{
int flag = false;
int data = 0;
int sum = 0;
int strlen = s.length();
int t;
if(s.at(0) == '-')
flag = true;
t = (flag)? 1:0;
for(int j = strlen-1; j >= t; --j)
{
data = s[j] - '0';
data *= pow(10, strlen -1 -j);
sum += data;
}
dataStack.push((flag)? -sum:sum);
}
int evalRPN(vector<string> &tokens)
{
int strSize = tokens.size();
for(int i = 0; i < strSize; ++i)
{
if(tokens.at(i)!="/"&&tokens.at(i)!= "-"&&tokens.at(i)!="+" && tokens.at(i)!="*")
chartoint(tokens.at(i));
else
evalRPNHelper(tokens.at(i));
}
return dataStack.top();
}
};