基本计算器 II

题目链接

给你一个字符串表达式 s ,请你实现一个基本计算器来计算并返回它的值。

整数除法仅保留整数部分。

示例:

输入:s = "3+2*2"
输出:7

思路

解法一:

遍历字符串 s,若为数字,则转化成十进制,并用变量 preSign 记录每个数字之前的运算符,对于第一个数字,其之前的运算符视为加号。每次遍历到数字末尾时,根据 preSign 来决定计算方式:

  • 加:将数字压入栈;
  • 减:将数字的相反数压入栈;
  • 乘除:计算数字与栈顶元素,并将栈顶元素替换为计算结果
class Solution {
public:
    int calculate(string s) {
        vector<int> stk;
        char preSign = '+';
        int num = 0;
        int n = s.length();
        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;
                    break;   
                default:
                    break;
                }
            
                preSign = s[i];
                num = 0;
                }
        }
        return accumulate(stk.begin(), stk.end(), 0);
    }
};