C ++中的基本计算器
假设我们要创建一个基本计算器,它将找到基本表达式结果。该表达式可以包含左括号和右括号,加号或减号以及空格。
因此,如果字符串类似于“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