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