解题思路
1.使用容器,保存符号运算后的数值,
2.加减号直接存入
3.乘除号与尾部元素计算后将其替换
代码
class Solution {
public:
int calculate(string s) {
vector<int> v;//容器v来存储符号后的数值
char preSign = '+';//变量 preSign 记录每个数字之前的运算符,对于第一个数字,其之前的运算符视为加号
int num = 0;// 保存当前数字
int n = s.length();//给出字符串的长度
for(int i = 0;i < n;++i){//遍历字符串
if(isdigit(s[i])){//当前字符是十进制数字字符
num = num * 10 + int(s[i] - '0');//防止读到两个连续的数字,如:12是两个字符,需要进位累加
}
if(!isdigit(s[i]) && s[i] != ' '|| i == n - 1){//若读到一个非数字且不是空格 或者 读到字符串末尾,则根据 preSign 来决定计算方
switch(preSign){
case '+'://如果是+
v.push_back(num);//数字直接存入
break;
case '-'://如果是-
v.push_back(-num);//数字存入负数
break;
case '*'://如果是-
v.back() *= num;//与末尾数字运算后结果存入
break;
default://如果是/
v.back() /= num;//与末尾数字运算后结果存入
}
preSign = s[i];// 处理完该数字后,更新 preSign 为当前遍历的字符
num = 0;
}
}
return accumulate(v.begin(),v.end(),0);// accumulate带有三个形参:头两个形参指定要累加的元素范围,第三个形参则是累加的初值。
}
};