.NET框架是否有一个函数可以计算字符串中包含的数字表达式并返回结果?铁:
string mystring = "3*(2+4)";
int result = EvaluateExpression(mystring);
Console.Writeln(result); // Outputs 18
Run Code Online (Sandbox Code Playgroud)
是否有标准框架功能,您可以用我的EvaluateExpression方法替换?
如果我有一个带有有效数学表达式的字符串,例如:
String s = "1 + 2 * 7";
Run Code Online (Sandbox Code Playgroud)
在.NET中是否有内置的库/函数来解析和评估该表达式并返回结果?在这种情况下15.
这是挑战(我自己的发明,但如果以前出现在网络的其他地方,我不会感到惊讶).
编写一个函数,该函数采用单个参数,该参数是简单数学表达式的字符串表示形式,并将其作为浮点值进行计算."简单表达"可以包括以下任何一种:正十进制数或负十进制数,+,-,*,/,(,).表达式使用(正常)中缀表示法.操作员应按其出现的顺序进行评估,即不像在BODMAS中那样进行 评估,但当然应该正确观察括号.该函数应该为此表单的任何可能表达式返回正确的结果.但是,该函数不必处理格式错误的表达式(即语法错误的表达式).
表达的例子:
Run Code Online (Sandbox Code Playgroud)1 + 3 / -8 = -0.5 (No BODMAS) 2*3*4*5+99 = 219 4 * (9 - 4) / (2 * 6 - 2) + 8 = 10 1 + ((123 * 3 - 69) / 100) = 4 2.45/8.5*9.27+(5*0.0023) = 2.68...
我预计会有某种形式的"作弊"/狡猾,所以请让我预先反对它!通过作弊,我指的是eval在动态语言(如JavaScript或PHP)中使用或等效函数,或者同时编译和执行代码.(我认为我的"没有BODMAS"的规格几乎可以保证这一点.)除此之外,没有任何限制.我在这里预计会有一些Regex解决方案,但不仅仅是这样,我们会感到很高兴.
现在,我主要对C#/ .NET解决方案感兴趣,但是任何其他语言都是完全可以接受的(特别是F#和Python用于功能/混合方法).我还没有决定我是否会接受最短或最巧妙的解决方案(至少对于语言而言)作为答案,但我欢迎任何语言的任何形式的解决方案,除了我刚才禁止的!
我现在在这里发布了我的C#解决方案(403个字符).更新: …
注意:数学表达式评估不是这个问题的焦点.我想在.NET中运行时编译和执行新代码. 话虽如此...
我想允许用户在文本框中输入任何等式,如下所示:
x = x / 2 * 0.07914
x = x^2 / 5
Run Code Online (Sandbox Code Playgroud)
并将该等式应用于传入的数据点.输入数据点由x表示,每个数据点由用户指定的等式处理.我多年前做过,但我不喜欢这个解决方案,因为它需要为每次计算解析等式的文本:
float ApplyEquation (string equation, float dataPoint)
{
// parse the equation string and figure out how to do the math
// lots of messy code here...
}
Run Code Online (Sandbox Code Playgroud)
当您处理大量数据点时,这会引入相当多的开销.我希望能够在飞行中将方程转换为函数,这样它只需要解析一次.它看起来像这样:
FunctionPointer foo = ConvertEquationToCode(equation);
....
x = foo(x); // I could then apply the equation to my incoming data like this
Run Code Online (Sandbox Code Playgroud)
函数ConvertEquationToCode将解析方程并返回指向应用适当数学的函数的指针.
该应用程序基本上是在运行时编写新代码.这可能与.NET有关吗?
可能重复:
.NET中是否有字符串数学计算器?
使用C#将字符串表达式转换为整数值
最佳和最短的方法来评估数学表达式c#evaluate
string"3*(4 + 2)"yield int 18
有没有办法以不同的方式计算像(2-3/4*12)这样的数学表达式?
好吧,我想在文本文件中有一个这样的字符串:
((( var1 AND var2 AND var3) OR var4) AND ((var5 OR var6) AND var7))
Run Code Online (Sandbox Code Playgroud)
在将其解析为c程序并处理并正确设置变量之后,它将最终看起来像这样:
((( 1 AND 0 AND 0) OR 1) AND ((0 OR 1) AND 1))
Run Code Online (Sandbox Code Playgroud)
是否有任何有用的库用于评估表示为这样的一个字符串的表达式?我以为我可以用字符串作为参数调用一个perl程序,它可以很容易地返回结果,但不确定C中是否有一个库可以做到这一点,或者是否有任何已知的算法可以解决这样的表达?
编辑:我实际上正在寻找的东西会吐出这个表达的答案,也许解析是一个坏词.即1或0
在一个坚果壳中,它包含一堆随机表达式(已知是正确的格式),需要被评估为0或1.(上面计算结果为1,因为它导致(1和1).
c# ×5
.net ×3
math ×3
evaluate ×2
expression ×2
c ×1
calculator ×1
code-golf ×1
compilation ×1
evaluation ×1
numeric ×1
parsing ×1
runtime ×1
string ×1
text-parsing ×1