很容易实现一个“计算器”来解析一个字符串(例如,2^3/2
)并计算操作结果。但是,有没有一个图书馆能够做到这一点?在您的应用程序如何评估由字符串表示的数学表达式?
回答
嵌入IronPython的,然后你可以问它来评估任意复杂的字符串
我觉得他们甚至拥有同样的事情
为了做到这一点,您将需要某种数学解析器。我之前使用过C# Expression Parser using RPN by DeepEddie,或者如果您使用的表达式的复杂性范围更加有限,则可以创建自己的表达式。
不要让它吓倒你,它实际上很容易做出来。
它只是非常简单的情况“容易” –
大多数事情倾向于当它更简单时更容易。 –
我只是说,编写一个解析输入字符串的计算器显然很容易具有欺骗性。这实际上是一个不平凡的问题。如果你不相信我,试试吧。 –
结账Reverse Polish notation。它在现代计算器中被广泛使用
我不明白这是如何有用的。 OP正在寻找一个现有的库,而不是寻求实现他自己的解析器(并因此重新发明轮子) –
但知道你正在寻找的东西的名称可能会有所帮助。 –
您也可以使用JScript库,尽管它已被弃用。不是说你应该,只是你可以。
我已经使用这个:
using System;
using System.CodeDom.Compiler;
using System.Reflection;
using Microsoft.JScript;
public class JScriptEvaluator
{
public int EvalToInteger(string statement)
{
string s = EvalToString(statement);
return int.Parse(s.ToString());
}
public double EvalToDouble(string statement)
{
string s = EvalToString(statement);
return double.Parse(s);
}
public string EvalToString(string statement)
{
object o = "-1";
try
{
o= EvalToObject(statement);
}
catch { o = "-1"; }
return o.ToString();
}
public object EvalToObject(string statement)
{
return _evaluatorType.InvokeMember(
"Eval",
BindingFlags.InvokeMethod,
null,
_evaluator,
new object[] { statement }
);
}
public JScriptEvaluator()
{
CodeDomProvider provider = new Microsoft.JScript.JScriptCodeProvider();
CompilerParameters parameters;
parameters = new CompilerParameters();
parameters.GenerateInMemory = true;
CompilerResults results;
results = provider.CompileAssemblyFromSource(parameters, _jscriptSource);
Assembly assembly = results.CompiledAssembly;
_evaluatorType = assembly.GetType("Evaluator.Evaluator");
_evaluator = Activator.CreateInstance(_evaluatorType);
}
private object _evaluator = null;
private Type _evaluatorType = null;
private readonly string _jscriptSource =
@"package Evaluator
{
class Evaluator
{
public function Eval(expr : String) : String
{
return eval(expr);
}
}
}";
}
- 1. 如何从J2ME中的字符串评估数学表达式
- 2. 如何评估(数学)字符串表达式,vb.net
- 3. 如何在java中评估字符串数学表达式
- 4. 评估数学表达式
- 5. 数学表达式评估
- 6. 数学表达式评估
- 7. 评估一个简单的字符串数学表达式
- 8. 评估字符串中的数学表达式
- 9. VB.Net-评估字符串中的数学表达式
- 10. Python - 评估字符串内的数学表达式
- 11. 从一个字符串使用VB评估数学表达式
- 12. Java字符串和数学表达式评估器
- 13. 评估布尔字符串表达式?
- 14. 使用正则表达式分割字符串评估字符串中的数学表达式
- 15. 评估c中的数学表达式#
- 16. 如何防止sqlite将字符串评估为数学表达式?
- 17. Java递归数学表达式评估
- 18. Mono.CSharp:评估数学表达式
- 19. 评估一个数学表达式(python)
- 20. 字典(字符串,字符串)无法评估表达式
- 21. 如何评估字符串中的表达式?
- 22. 如何评估字符串中的表达式?
- 23. 如何评估具有条件表达式的字符串vba
- 24. 评估数学表达式与正则表达式
- 25. 如何评估表达式?
- 26. Can Sass可以评估包含数学表达式的字符串吗?
- 27. 字符串表达式将被评估为数字
- 28. 如何使用eval()评估python字符串布尔表达式?
- 29. 从字符串评估数学表达式并将其插入到堆栈中
- 30. 以字符串形式给出的表达式的评估
你的意思是(2^3)/ 2或2 ^(3/2)? – Gumbo
它不会那么容易,因为编译语言c#没有eval函数(例如,不像perl) –
你的意思是'2除以3的幂除以2'或'2 XOR 3除以2'? – Earlz