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

更新於: 2020年5月26日

1K+ 次瀏覽

開啟你的 職業生涯

透過完成課程獲得認證

開始學習
廣告