类似栈的方法
class Solution {
public:
int calculate(string s) {
int len = s.size();
vector<int> myvec; // 存储算式中的数值
int num = 0;
char pre_signal = '+'; // 存储前一个符号,默认为+。为什么需要前一个运算符?因为计算是需要运算发左边的值和右边的值
for(int i=0; i<len; i++)
{
if(s[i]>='0' && s[i]<='9')// 如果是数字,获取完整的数值
{
num = num*10 + int(s[i]-'0');
}
if(!(s[i]>='0' && s[i]<='9') && s[i]!=' ' || i == len-1) // 如果是计算符或者字符串结尾
{
switch(pre_signal)
{
// 对于不同的前置字符,进行不同的处理
case '+': // 加法,直接将num存入
myvec.push_back(num);
break;
case '-': // 减法,存入num的相反数
myvec.push_back(-num);
break;
case '*': // 乘法,直接对尾部数值进行乘法操作
myvec.back() *= num;
break;
case '/': // 除法,直接对尾部数值进行除法操作
myvec.back() /= num;
break;
default: break;
}
pre_signal = s[i];
num = 0;
}
}
return accumulate(myvec.begin(), myvec.end(), 0);
}
};