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