首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C# 算術表達式求值:逆波蘭表示法實作

     編輯:關於C語言

專案背景

算術表達式求值是經典問題。本實作參考 IBM developerWorks 文章「快速精確的數學表達式求值」(Java 版),以 C# 重寫並擴充。核心演算法為逆波蘭表示法(RPN,後綴表示法)。

核心類別結構

namespace XIYV.Compute
{
    public sealed class SimpleRPN
    {
        private SimpleRPN() { }

        // 中綴轉後綴(RPN)
        private static string BuildingRPN(string s) { ... }

        // 計算 RPN 表達式
        public static string ComputeRPN(string s) { ... }

        // 運算子優先級
        private static int Power(char opr) { ... }

        // 格式化空白
        private static string FormatSpace(string s) { ... }
    }
}

關鍵演算法細節

  • 負號預處理:將一元負號(如 -(3+5))轉為單目運算子 !,避免與減號混淆。
  • 中綴轉後綴:使用堆疊處理運算子優先級與括號,輸出以空格分隔的後綴表達式。
  • 後綴求值:掃描後綴表達式,數值入堆疊,遇運算子彈出運算元計算後推回。支援一元(!)、二元(+ - * / % ^)運算。
  • 優先級函數 Power():集中管理運算子優先級,易於擴充新運算子。

已知限制

  • 三角函數、雙曲線函數計算不穩定。
  • 原 Java 版 w3eval 亦無法正確計算 -(3+5) 類表達式,本實作透過負號預處理解決此問題。

測試案例

支援複雜巢狀運算、負數、小數、多層括號等表達式,如:

(6+9-8+5-8)*(2+5+8)/7+5
1+2+3+4+5+6+7+8+9
(6+9-8+5-8)*(2+5+8)

完整代碼較長,核心邏輯已在 BuildingRPN、ComputeRPN、Power 三方法中實現。

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