224:基本计算器
- 题目描述
实现一个基本的计算器来计算一个简单的字符串表达式的值。
字符串表达式可以包含左括号 ( ,右括号 ),加号 + ,减号 -,非负整数和空格 。
示例一:
输入: "1 + 1"
输出: 2
示例二:
输入: " 2-1 + 2 "
输出: 3
示例三:
输入: "(1+(4+5+2)-3)+(6+8)"
输出: 23
说明:
你可以假设所给定的表达式都是有效的。
请不要使用内置的库函数 eval。
思路
知识点:栈的使用
- 声明两个栈结构,一个栈存放数字,另一个栈存放操作符(’+’,’-’);
- 当字符串只是进行两个数相加减时,设定一个栈运算函数,将两个栈内的元素弹出进行运算,如字符串=“1+121”;
- 遍历字符串(括号处理)
3.1. 如果当前字符是数字字符,将其转化为数字,继续遍历下一个字符,一直到当前字符非数字字符为止 ,确定最终的数字,将其压入数字栈。
3.2 如果当前字符是运算符字符,将其压入操作符栈,并更新标志位,使得下次数字压入数字栈时进行栈运算
3.3 如果字符为左括号,更新标志位,使得下次数字压入数字栈时不发生栈运算
3.3 如果遇到右括号,直接进行栈预算
代码实现
class Solution
{
public:
static int calculate(string s) {
stack<int> num_stack;//栈中存放字符转化后的数字
stack<char> op_stack;//栈中存放运算符
int number =