C++ 基础计算器
假设我们想要创建一个基本的计算器,用于计算基本表达式的结果。表达式可以包含括号、加号或减号以及空格。
例如,如果字符串为“5 + 2 - 3”,则结果为 7。
为了解决这个问题,我们将遵循以下步骤:
ret := 0,sign := 1,num := 0,n := s 的大小
定义一个栈 st
初始化 i := 0,当 i < n 时,i 增加 1:
定义一个数组 x = s,大小为 i
如果 x >= '0' 且 x <= '9',则:
num = num * 10
num = num + (x - '0')
否则,如果 x 等于 '(',则:
ret = ret + (sign * num)
将 ret 推入 st
将 sign 推入 st
ret := 0,sign := 1,num := 0
否则,如果 x 等于 ')',则:
ret = ret + (sign * num),sign := 1,num := 0
ret = ret * st 的栈顶元素
从 st 中弹出元素
ret = ret + st 的栈顶元素
从 st 中弹出元素
否则,如果 x 等于 '+',则:
ret = ret + (sign * num),sign := 1,num := 0
否则,如果 x 等于 '-',则:
ret = ret + (sign * num),sign := -1,num := 0
如果 num 不为零,则:
ret = ret + sign * 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
广告