赞
踩
这个题的解析用到了好多我不熟悉的函数
·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); } };
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); } };
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); } };
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。