表达式求值-C++

表达式求值-C++

编码文章call10242025-03-09 15:59:3742A+A-


描述

请写一个整数计算器,支持加减乘三种运算和括号。


示例1

输入:

"1+2"

返回值:

3


示例2

输入:

"(2*(3-4))*5"

返回值:

-10


示例3

输入:

"3+2*3*4-1"

返回值:

26

class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     * 返回表达式的值
     * @param s string字符串 待计算的表达式
     * @return int整型
     */
    int solve(string s) {
        // write code here
        int res = 0; //返回字符串计算结果
        stack sum;//用于求和
        char sign = '+';//初始化为+,记录前一个符号,当前字符串先加0
        int num = 0;//将连续字符串转化成数字,记录递归结果
        for(int i = 0; i < s.size i ifsi>= '0' && s[i] <= 9 num='10' num si - 0 ifsi='= '(')' int left='i++,' count='1;//left记录左括号的位置,count记录左括号数' i whilecount> 0 )
                {//最终目的是找到与最左括号匹配的右括号,类似于栈操作
                    if(s[i] == '(')count++;
                    else if(s[i] == ')')count--;
                    i++;
                }
                num = solve(s.substr(left + 1, i - left - 2));
                //迭代计算括号内的数值,不能保号最左最尤括号,不然会跑死
                i--;//此时i是最右括号的下一位,需哟啊左移一位,防止越界
            }
            if(i == s.size() - 1 || s[i] == '+' || s[i] == '-' || s[i] == '*')
            {//对于字符串尾,或者加减乘,用上一次的符号,结算当前数字
                if(sign == '+') sum.push(num);
                else if(sign == '-') sum.push(-num);
                else if(sign == '*') sum.top() *= num;
                sign = s[i];//更新符号,末尾是右括号也无妨,马上就退出循环
                num = 0;
            }
        }
        while(!sum.empty())
        {
            res += sum.top();
            sum.pop();
        }
        return res;
    }
};
点击这里复制本文地址 以上内容由文彬编程网整理呈现,请务必在转载分享时注明本文地址!如对内容有疑问,请联系我们,谢谢!
qrcode

文彬编程网 © All Rights Reserved.  蜀ICP备2024111239号-4