presign保存前一个标志
如果前一个标志为+ 则PUSH当前值
如果前一个标志为- PUSH当前值相反数
如果前一个标志为* PUSH当前值乘以栈顶元素 POP栈顶
如果前一个标志为/ PUSH栈顶元素除以当前值 POP栈顶
然后置零每次的NUM
更新新的presign
class Solution {
stack<int>f;
public:
int calculate(string s) {
int res=0;
long num=0;
char presign='+';
for(int i=0;i<s.size();i++)
{
if(s[i]>='0'&&s[i]<='9')
{
num=num*10+s[i]-'0';
}
if(!isdigit(s[i])&&s[i]!=' '||i==s.size()-1){
switch(presign){
case'+':f.push(num);break;
case'-':f.push(-num);break;
case'*':{num*=f.top();
f.pop();
f.push(num);break;
}
case'/':{num=f.top()/num;
f.pop();
f.push(num);
}
}
presign=s[i];
num=0;
}
}
while(!f.empty())
{res+=f.top(); f.pop();}
return res;
}
};