乱七八糟一堆尝试,还没有固定的思路以及解法。但是还是一次AC了,主要在测试时考虑了基本上所有能考虑的例子了。每次假如一个数字,就判断signal顶部的符号,再放入数字。
最后计算加和。
class Solution {
public:
int calculate(string s) {
stack<int> nums;
stack<char> signal;
int i=0;
while(i<s.size())
{
if(isdigit(s[i]))
{
int num=0;
while(i<s.size()&&isdigit(s[i]))
num=num*10+s[i++]-'0';
if(!signal.empty())
{
if(signal.top()=='*')
{
int top=nums.top();
nums.pop();
nums.push(top*num);
}
else if(signal.top()=='/')
{
int top=nums.top();
nums.pop();
nums.push(top/num);
}
else if(signal.top()=='-')
nums.push(-num);
else//top=='+'
nums.push(num);
signal.pop();
}
else//no signal
nums.push(num);
//cout<<num<<endl;
}
else if(s[i]!=' ')
signal.push(s[i++]);
//cout<<s[i++]<<endl;
else
i++;
}
//cal '+'
int result=0;
while(!nums.empty())
{
result+=nums.top();
nums.pop();
}
return result;
}
};