发布:用递归算法实现的四则运算表达式运算器源码 (跟贴有分)
最近有很多朋友在问如何解析字符串形式的表达式的值,在高级程序员的教材后面有一个类似的例题,有兴趣的朋友可以研究一下它的算法,它是采用堆栈来运算的,用C写的,不过要改成C#很容易。
我在这里给大家提供一个我以前写过的一个表达式的运算器,采用的是递归的方法分析表达式,可以进行四则运算、开方、幂,Round、Trunc、Max等数学函数,基本的三角函数、IF、AND、OR等逻辑运算。
我测试过,比利用堆栈的算法在表达式不是很长的情况下要快一倍左右,不过缺点也很明显,对函数库的扩充会降低运算的效率,这是我们一个项目中需要的,花了两天时间写出来,一直没有进行优化,贴出来只是给大家参考参考,如果急着用的朋友,可以贴出去编译之后就可以用了。
使用方法:
1、不含变量:
string expression = "1+32*9+Round(12*(1+9))";
decimal[] results = Calculator.CalculateExpression( expression,null);
results[0]就是返回值
2、含变量:
string expression = "a+23*b";
NameValueCollection parameters = new NameValueCollection();
parameters.Add("a","12.234");
parameters.Add("b","34");
decimal[] results = Calculator.CalculateExpression( expression,parameters);
results[0]就是返回值