每日编程中遇到任何疑问、意见、建议请公众号留言或直接撩Q474356284(备注每日编程)
实现一个基本的计算器来计算一个简单的字符串表达式的值。
字符串表达式仅包含非负整数,+
, -
,*
,/
四种运算符和空格
。整数除法仅保留整数部分。
示例 1:
输入: "3+2*2"
输出: 7
示例 2:
输入: " 3/2 "
输出: 1
示例 3:
输入: " 3+5 / 2 "
输出: 5
说明:
你可以假设所给定的表达式都是有效的。
请不要使用内置的库函数
eval
。
解决方法:
(1)算法的基本思想:
使用数字栈和符号栈。
(2)代码实现:
//如果代码换行了不妨将屏幕横放哦
class Solution
{
public:
int calculate(string s)
{
long res = 0, num = 0;
char op = '+';
stack<int> nums;
for (int i = 0; i < s.size(); ++i)
{
if (isdigit(s[i]))
{
num = num * 10 + s[i] - '0';
}
//如果s[i]不是数字不是空格,没计算到末尾
if ((!isdigit(s[i]) && s[i] != ' ') || i == s.size() - 1)
{
if (op == '+')
nums.push(num);//存值,因为乘法要先算。
if (op == '-')
nums.push(-num);//存值,举栗子:5-1*4 -> 5+(-1)*4
if (op == '*' || op == '/')
{
int tmp = (op == '*') ? nums.top() * num : nums.top() / num;
nums.pop();
nums.push(tmp);
}
op = s[i];
num = 0;//不要忘了重置num
}
}
//进行最后一次计算
while (!nums.empty())
{
res += nums.top();
nums.pop();
}
return res;
}
};
包含‘+’、‘-’、‘*’、‘/’、‘(’、‘)’,输出运算结果。
输入格式:
字符串的中缀表达式
输出格式:
计算结果输入样例:
3+(5-3)*2
输出样例:
7
class Solution {
public:
int calculate(string s) {
}
};