题目
代码(首刷看解析)
这个题的解析用到了好多我不熟悉的函数
-
·
accumulate
定义在#include中,作用有两个,一个是累加求和,另一个是自定义类型数据的处理。
累加求和:int sum = accumulate(vec.begin() , vec.end() , 42);
accumulate带有三个形参:头两个形参指定要累加的元素范围,第三个形参则是累加的初值。
string sum = accumulate(v.begin() , v.end() , string(" "));
-
isdigit(char n)
:判断字符n是否在0~9
class Solution {
public:
int calculate(string s) {
int n = s.size();
int num = 0;
char preSign = '+';
vector<int> stk;
for(int i = 0; i < n; i++) {
if(isdigit(s[i])) {
num = num*10 + int(s[i]-'0');
}
if (!isdigit(s[i]) && s[i] != ' ' || i == n - 1) {
switch(preSign) {
case '+':
stk.push_back(num);
break;
case '-':
stk.push_back(-num);
break;
case '*':
stk.back() *= num;
break;
case '/':
stk.back() /= num;
}
preSign = s[i];
num = 0;
}
}
return accumulate(stk.begin(), stk.end(), 0);
}
};
代码(9.9 二刷看解析)
class Solution {
public:
int calculate(string s) {
int num = 0;
char pre = '+';
vector<int> v;
for(int i = 0; i < s.size(); i++) {
if(isdigit(s[i])) {
num = num*10 + int(s[i]-'0');
}
if((s[i] != ' ' && !isdigit(s[i])) || i == s.size()-1) {
if(pre =='+') {
v.push_back(num);
} else if(pre == '-') {
v.push_back(-num);
} else if(pre == '*') {
v.back() *= num;
} else {
v.back() /= num;
}
pre = s[i];
num = 0;
}
}
return accumulate(v.begin(), v.end(), 0);
}
};
代码(9.25 三刷看解析)
class Solution {
public:
int calculate(string s) {
int i = 0;
vector<int> sk;
int num = 0;
char pre = '+'; // 第一个数是正的
while(i < s.size()) {
if(isdigit(s[i])) {
num = num*10 + int(s[i]-'0');
}
if((s[i] != ' ' && !isdigit(s[i])) || i == s.size()-1) {
if(pre == '+') {
sk.push_back(num);
} else if(pre == '-') {
sk.push_back(-num);
} else if(pre == '*') {
sk.back() *= num;
} else {
sk.back() /= num;
}
pre = s[i];
num = 0;
}
i++;
}
return accumulate(sk.begin(), sk.end(), 0);
}
};