发布:用递归算法实现的四则运算表达式运算器源码 (跟贴有分)

timmy3310 2003-04-03 09:19:11
最近有很多朋友在问如何解析字符串形式的表达式的值,在高级程序员的教材后面有一个类似的例题,有兴趣的朋友可以研究一下它的算法,它是采用堆栈来运算的,用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]就是返回值
...全文
392 28 打赏 收藏 转发到动态 举报
写回复
用AI写文章
28 条回复
切换为时间正序
请发表友善的回复…
发表回复
billow_chentao 2010-06-07
  • 打赏
  • 举报
回复
作个记号
flyfish51f 2003-04-15
  • 打赏
  • 举报
回复
收藏
philins 2003-04-15
  • 打赏
  • 举报
回复
up
fengxin107 2003-04-15
  • 打赏
  • 举报
回复
收收收收收收收收
谢谢
imports 2003-04-15
  • 打赏
  • 举报
回复
接分!
asam2183 2003-04-15
  • 打赏
  • 举报
回复
UP
Jain123 2003-04-15
  • 打赏
  • 举报
回复
timmy3310 2003-04-03
  • 打赏
  • 举报
回复
基本上源代码里面有一些注释

更详细的就没有了,有什么问题,你可以直接问我

timmy_liu@hotmail.com
JetWan 2003-04-03
  • 打赏
  • 举报
回复
我试了一下,很不错,有没有更详细的说明文档,学习一下
dragontt 2003-04-03
  • 打赏
  • 举报
回复
To li_new(重获新生)
什么意思啊?
liuyong_lll 2003-04-03
  • 打赏
  • 举报
回复
学习
asp_net 2003-04-03
  • 打赏
  • 举报
回复
hao
晓梦周生 2003-04-03
  • 打赏
  • 举报
回复
ok
li_new 2003-04-03
  • 打赏
  • 举报
回复
dragontt(龙人) 我发觉你的分涨不要太快哦!
csdn00 2003-04-03
  • 打赏
  • 举报
回复
谢谢楼主!^_^
afengsunwin 2003-04-03
  • 打赏
  • 举报
回复
Thanks!:)
fly_miss 2003-04-03
  • 打赏
  • 举报
回复
up
timmy3310 2003-04-03
  • 打赏
  • 举报
回复
需要的请把三个回复的代码按顺序粘回去编译就可以用了

我已经测试过
timmy3310 2003-04-03
  • 打赏
  • 举报
回复
不好意思,太长了,所以分开贴的
dragontt 2003-04-03
  • 打赏
  • 举报
回复
up
加载更多回复(8)

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧