假设我们要创建一个基本计算器,它将找到基本表达式结果。该表达式可以包含左括号和右括号,加号或减号以及空格。
因此,如果字符串类似于“ 5 + 2-3”,则结果将为7
为了解决这个问题,我们将遵循以下步骤-
ret:= 0,符号:= 1,num:= 0,n:= s的大小
定义一个堆栈st
用于初始化i:= 0,当i <n时,将i增加1做-
ret = ret +(符号* num),符号:=-1,num:= 0
ret = ret +(符号*数字),符号:= 1,数字:= 0
ret = ret +(符号*数字),符号:= 1,数字:= 0
ret = ret * st的顶部元素
从st删除项目
ret = ret + st的顶部元素
从st删除项目
ret = ret +(符号*数字)
将ret插入st
将符号插入st
ret:= 0,符号:= 1,num:= 0
num = num * 10
num = num +(x-'0')
定义一个数组x = s,其大小为i
如果x> ='0'并且x <='9',则,
否则,当x与'('相同时,则-
否则,当x与')'相同时,则-
否则,当x与'+'相同时,则-
否则,当x与'-'相同时,则-
如果num不为零,则
ret = ret +符号* num
返回ret
让我们看下面的实现以更好地理解-
#include <bits/stdc++.h>
using namespace std;
class Solution {
public:
int calculate(string s) {
int ret = 0;
int sign = 1;
int num = 0;
int n = s.size();
stack <int> st;
for(int i = 0; i < n; ++i){
char x = s[i];
if(x >= '0' && x <= '9'){
num *= 10;
num += (x - '0');
}
else if(x == '('){
ret += (sign * num);
st.push(ret);
st.push(sign);
ret = 0;
sign = 1;
num = 0;
}
else if(x == ')'){
ret += (sign * num);
sign = 1;
num = 0;
ret *= st.top();
st.pop();
ret += st.top();
st.pop();
}
else if(x == '+'){
ret += (sign * num);
sign = 1;
num = 0;
}
else if(x == '-'){
ret += (sign * num);
sign = -1;
num = 0;
}
}
if(num){
ret += sign * num;
}
return ret;
}
};
main(){
Solution ob;
cout << (ob.calculate("5 + 2 - 3"));
}"5 + 2 - 3"
输出结果
4