繁体   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