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); } };
|