0%

227. 基本计算器 II

227. 基本计算器 II

先算优先级高的乘除再总体算加减。

主要是对这个presign的处理

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
class Solution {
public:
int calculate(string s) {
char preSign = '+';
long num = 0;
int sz = s.size();
vector<int> st;
for(int i = 0; i < sz; ++i)
{
auto ch = s[i];
if(isdigit(ch))
num = num * 10 + ch - '0';
// 当是符号时候或者走到了最后一位
if((!isdigit(ch) && ch != ' ') || i == sz - 1)
{
// 记录之前的符号
switch(preSign)
{
case '+':
st.push_back(num);
break;
case '-':
st.push_back(-num);
break;
case '*':
st.back() *= num;
break;
case '/':
st.back() /= num;
}
num = 0;
preSign = ch;
}
}
return accumulate(st.begin(), st.end(), 0);
}
};