
一、题目描述

二、算法原理
思路:使用 vector 来模拟栈结构存储整数,char 类型来存储运算符
1)一开始把 op 初始化为 '+',便于后续操作

2)开始变量字符串,如果是运算符直接 op = 运算符,更新运算符
3)如果是数字,因为有些数字是连续的,例如:"123",我们使用 while 拿到完整的数字 123,之后判断 op 是什么运算符,if : op == '-',就让他变成相反数再入栈,if : op == '/' ,到栈顶元素之后把栈顶元素出栈,最后栈顶元素 / 数字的结果入栈,if : op == '*' ,这个过程和 / 一样,if : op == ' + ' ,直接让数字入栈。
过程:



4)把栈里面的数字全部加起来的值就是最终答案;
三、代码实现
cpp
class Solution {
public:
int calculate(string s) {
char op = '+';
vector<int> stack;
for(int i = 0; i < s.size();)
{
char ch = s[i];
if(ch == ' ')//空格就下一个
{
i++;
continue;
}
if(ch == '-' || ch == '+' || ch == '/' || ch == '*')//处理运算符
{
op = ch;
i++;
}
else
{
//整数
int tmp = 0;
while(i < s.size() && isdigit(s[i]))//保证循环时 s[i] 是整数
{
tmp = tmp * 10 + (s[i] - '0');
i++;
}
if(op == '-') tmp = 0 - tmp;
else if(op == '*')
{
tmp = stack.back() * tmp;
stack.pop_back();
}
else if(op == '/')
{
tmp = stack.back() / tmp;
stack.pop_back();
}
stack.push_back(tmp);
}
}
// stakc 里面的数据此时全是加法运算
int ret = 0;
for(auto& e : stack) ret += e;
return ret;
}
};