首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

C++ 棧實現計算器:後綴表達式演算法與常見錯誤

     編輯:程式設計疑難解答

核心思路:中綴轉後綴(逆波蘭表示法)再求值

  1. 中綴轉後綴:使用運算元棧,根據優先級與括號輸出後綴序列。
  2. 後綴求值:使用運算數棧,遇數字入棧,遇運算元彈出兩數計算後壓入結果。

關鍵資料結構

struct Calculator {
    std::stack<char> opStack;   // 運算元
    std::stack<double> valStack; // 運算數
};

優先級表(數字越大優先級越高)

運算元優先級
+ -1
* /2
(0 (棧內最低)
)觸發彈出直到 (

常見錯誤與修正

  • 多位數解析:需連續讀取數字字元組成完整數值,而非逐字元入棧。
  • 負數處理:區分一元減號與二元減號(前一個 token 為運算元或開頭視為一元)。
  • 除零檢查:執行除法前檢查除數是否為 0。
  • 括號匹配:遇右括號時若棧頂無左括號 → 語法錯誤。
  • 緩衝區溢出:使用 std::string/std::vector 替代固定陣列。

建議:直接使用成熟庫

生產環境建議嵌入 muParser、exprtk、tinyexpr 等輕量表達式解析庫,避免手寫解析器的邊界 Bug。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved