字符串表达式加减乘法求值
Posted vector6_
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了字符串表达式加减乘法求值相关的知识,希望对你有一定的参考价值。
字符串表达式加减乘法求值
请写一个整数计算器,对于输入的字符串,支持加减乘三种运算和括号。
示例1:
“1+2”
3
示例2:
“(2*(3-4))*5”
-10
class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
* 返回表达式的值
* @param s string字符串 待计算的表达式
* @return int整型
*/
int solve(string s) {
int res = 0;
stack<int> sumStack;
char sign = '+'; //保存上一次的运算符
int num = 0; //数字
for(int i=0; i<s.length(); ++i)
{
if(s[i] >= '0' && s[i]<='9')
{
num = num * 10 + s[i]-'0';
}
if(s[i] == '(') //对于括号,先找到对应的右括号,然后递归
{
int left = i++, count = 1; //left记录最左括号位置,count记录左括号数
while(count>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.length()-1 || s[i]=='+' || s[i]=='-' || s[i]=='*')
{
if(sign == '+') //注意根据上一次的计算符判断本次的操作
sumStack.push(num); //加减法直接入栈,乘法与栈顶相乘
else if(sign == '-')
sumStack.push(-num);
else if(sign =='*')
sumStack.top()*=num;
sign = s[i];
num = 0;
}
}
while(!sumStack.empty()) //最后将栈内所有数字相加
{
res+=sumStack.top();
sumStack.pop();
}
return res;
}
};
以上是关于字符串表达式加减乘法求值的主要内容,如果未能解决你的问题,请参考以下文章