一个简单的库或实现一个数学表达式求值器我有一个文本文件,其中只有一行,其中只包含一个数学表达式,例如12+(3.0*(4)-1)/sqrt(121)我的程序需要将这个表达式表示为一个字符串,然后给出结果13有没有简单的方法或第三方dll/lib来实现这个?补充评论:在这里计算一堆简单的数学表达式是解决方案,但许多解决方案仅包含+-/*,我需要尽可能多的运算符,例如ceilingsquareroot和power()所以这个链接可能是最好的解决方案http://www.codeproject.com/KB/recipes/sota_expression_evaluator.aspx使用ExprTk库可以轻松获得以下简单解决方案:#include#include#include"exprtk.hpp"intmain(){typedefexprtk::expression表达式_t;typedefexprtk::parserparser_t;std::stringexpression_string="12+(3.0*(4)-1)/sqrt(121)";表达式_t表达式;parser_t解析器;if(parser.compile(expression_string,expression)){doubleresult=expression.value();printf("结果:%19.15n",结果);}elseprintf("表达式n错误。");返回0;对于C等人,这里有一个需要Perl的快速但非常不安全的欺骗:doubleeval(constchar*expr){charbuf[1024];snprintf(buf,sizeof(buf),"perl-e'print(%s)'",expr);文件*p=popen(buf,"r");双胞胎d;fscanf(p,"%lf",&d);f关闭(p);返回d;我认为,在UNIX编程环境中,开发了一个简单的计算器,称为hoc(IIRC),它的源代码几乎可以在任何地方使用。干杯&hth。我考虑嵌入lua。它快速、轻便且安全。它专为嵌入而设计。被许多游戏用作脚本语言。(比python或perlIMO更容易嵌入)这是一个完整的示例,显示它是多么微不足道intmain(){std::string表达式="12+(3.0*(4)-1)/math.sqrt(121)";lua_State*L=lua_open();luaopen_math(L);if(luaL_dostring(L,("return"+expression).c_str())!=0){std::cout如果你想要勇敢的来源,你可以随时查看bc。它为您处理Lex/Yacc的所有优点。如果您想要纯C++解决方案,可以尝试使用BoostSpirit对其进行编码。对于C++,请尝试muParser:muParser-快速数学解析器库.NET解决方案:这里有几个关于SO的线程:还有两个我使用过的项目:C#:NCalc-..NET的数学表达式计算器NCalc是.NET中的数学表达式计算器。NCalc可以解析任何表达式并对结果求值,包括静态或动态参数和自定义函数。VB.NET:快速且轻量级的表达式求值器Flee是.NETFramework的表达式解析器和求值器。它允许您在运行时评估字符串表达式,例如sqrt(a^2+b^2)。它使用自定义编译器、强类型表达式语言和轻量级代码生成器将表达式直接编译为IL。这意味着表达式评估非常快速和高效。试试这个演示,它可以让您根据表情生成图像,然后亲眼看看。您可以将它与C#一起使用,因为它无论如何都是.NET(通过程序集引用)。以上就是C#学习教程:简单的数学表达式求值程序库或者所有要分享的内容。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文来自网络收集,不代表作品如涉及侵权,请点击右边联系管理员删除。如需转载请注明出处:
