C# 字符串转化为表达式

[复制链接]
查看11 | 回复2 | 2011-2-25 08:34:52 | 显示全部楼层 |阅读模式
最近想写一个蒙特卡洛模拟的小程序,想让用户来输入要模拟的表达式,如“x^2+y”,然后程序随机生成x、y的值来进行模拟。
现在的问题是,不知道如何处理用户以字符串类型输入的这种表达式,求高手指点
比如,读取到String str = “x^2+y”之后,该如何去把随机生成的x、y的数值带到里面的去计算x^2+y
如果这个表达式只用一次的话,那么完全可以按照普通计算机编程的思路来做,也就是把字符串拆开,然后每步一个运算符来计算
但是现在在蒙特卡洛模拟的背景下,表达式要被用成千上万次,所以如果每次都拆字符串的话就很没效率了
感觉现在最有可能实现的方式是,只拆一次字符串,然后把表达式以某种形式储存,以后直接运算而不需要再重新拆。不过也只限于想法而已,不知道该怎么实现

回复

使用道具 举报

千问 | 2011-2-25 08:34:52 | 显示全部楼层
嗯,楼上的同学说的是靠谱的方法。如果你有时间的话应该练习表达式识别等等的有趣实例。如果实在是图便宜的话呢,可以用C#编译器自带的表达式编译系统来完成:public double Calculate(string formula, double x, double y)
{
CSharpCodeProvider provider = new CSharpCodeProvider();
CompilerParameters parameter = new CompilerParameters();
parameter.ReferencedAss
回复

使用道具 举报

千问 | 2011-2-25 08:34:52 | 显示全部楼层
我的思路是:先把字符串拆分开,然后判断各个字符代表的含义,再生成相应的表达式来计算。比如case "+" :要执行+的操作 ,依此类推,要注意运算符号执行的顺序。可能要用很多判断。我只是这样想,没有具体实践下,改天有时间了试试,感觉挺有意思 ^_^ -----------------------继续回答楼主的补充------^_^对于你补充的问题
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行