簡體   English   中英

評估清單<string>作為數學表達式</string>

[英]Evaluating List<String> as a mathematical expression

我有一個充滿值和運算符的List<String>

["123", "+", "(", "890", "-", "15.00", ")"]

我知道我可以制作一個算法,將這些數字和運算符推入堆棧並將它們彈出並評估為 go。 但是,不使用外部庫有沒有更好的方法呢?

將數字和運算符壓入堆棧將是一個解釋器。

顯然更好的方法(對於“更好”的一些定義)是編寫一個編譯器!

您已經將輸入拆分為詞法標記,因此您可以跳過實現詞法分析器並直接開始構建 AST。 您可以在System.Linq.Expressions 命名空間中找到合適的類來轉換您的輸入; 看看表達式 Class 您可以將結果包裝在 lambda 表達式中,將其編譯為 IL 並在 CLR 上執行!

您可以加入List ,然后讓編譯器在運行時評估它,如 Mehrdad 所述。

Expression e = new Expression("5 * 2"); 
e.Evaluate();

我在這里發現了一個非常相似的問題

更新:

NCalc “NCalc - .NET 的數學表達式評估器”盡管這是一個外部庫,但我認為它是一個開源項目,這意味着您可以將代碼直接添加到您的項目中。

更新:

您可以使用String.Join function 加入列表。

string formula = String.Join("",listMathOperators);

您始終可以使用 .NET 框架中的 C# 編譯器類將其評估為 C# 表達式...

我有一個完整的 class 可以計算任何表達式。

首先,您需要將列表中的所有字符串提取為單個字符串,例如:

string sExpression = "123+(890-15.00)";

其次,您需要在解析器中評估此表達式,我有一個完整的 class 可以為您制作,但我無法在此處附加文件。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM