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