实现一个基本的计算器来计算一个简单的字符串表达式的值。
字符串表达式仅包含非负整数,+, - ,*,/ 四种运算符和空格 。 整数除法仅保留整数部分。
示例 1:
输入: "3+2*2"
输出: 7
示例 2:
输入: " 3/2 "
输出: 1
示例 3:
输入: " 3+5 / 2 "
输出: 5
来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/basic-calculator-ii 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
class Solution {
public:
int calculate(string s) {
stack<int> stk;
char op = '+';
int prev = 0, num = 0, ans = 0;
for(int i = 0; i < s.size(); i++)
{
//if(s[i] == ' ')不能写在这里,如果最后是空格,程序不能处理最后一个数
// continue;
if(isdigit(s[i]))
num = num * 10 + (s[i] - '0');
if(s[i] < '0' && s[i] != ' ' || i == s.size()-1)
{
if(op == '+')
stk.push(num);
else if(op == '-')
stk.push(-num);
else if(op == '*')
{
prev = stk.top();
stk.pop();
stk.push(prev*num);
}
else
{
prev = stk.top();
stk.pop();
stk.push(prev/num);
}
op = s[i];
num = 0;
}
}
while(!stk.empty())
{
ans += stk.top();
stk.pop();
}
return ans;
}
};
+,-
时将结果加到ansclass Solution {
public:
int calculate(string s) {
char op = '+';
int curans = 0, num = 0, ans = 0;
for(int i = 0; i < s.size(); i++)
{
if(isdigit(s[i]))
num = num * 10 + (s[i] - '0');
if(s[i] < '0' && s[i] != ' ' || i == s.size()-1)
{
if(op == '+')
curans += num;
else if(op == '-')
curans -= num;
else if(op == '*')
curans *= num;
else
curans /= num;
if(s[i] == '+' || s[i] == '-' || i == s.size()-1)
{
ans += curans;
curans = 0;
}
op = s[i];
num = 0;
}
}
return ans;
}
};
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有