正常计算器的计算形式。首先需要注意的是将连续的数字转换成数。第二点是栈中只维护数,而若出现减法,则即为-n,若出现乘除,则只对栈顶元素进行操作。最后把栈中所有元素相加即可,贴代码
1 class Solution { 2 public: 3 int calculate(string s) { 4 vector<int> stk; 5 char preSign = '+'; 6 int num = 0; 7 int n = s.length(); 8 for (int i = 0; i < n; ++i) 9 { 10 if (isdigit(s[i])) 11 { 12 num = num * 10 + int(s[i] - '0'); 13 } 14 if (!isdigit(s[i]) && s[i] != ' ' || i == n - 1) 15 { 16 switch (preSign) 17 { 18 case '+': 19 stk.push_back(num); 20 break; 21 case '-': 22 stk.push_back(-num); 23 break; 24 case '*': 25 stk.back() *= num; 26 break; 27 default: 28 stk.back() /= num; 29 } 30 preSign = s[i]; 31 num = 0; 32 } 33 } 34 return accumulate(stk.begin(), stk.end(), 0); 35 } 36 };