游泳

net表达式计算器中缀表达式转后缀表达式

2019-09-18 02:38:30来源:励志吧0次阅读

  最近在上查了一下表达工计算器的类库,发现Java版本的有一个比较成熟的叫W3EVal,好像是一个IBM工程师写的,.net就很少了(可能是我了解不够多),但投机取巧的实现思路有很多,比如:

  (1)将Javasript中代码编译成.net类库,利用Javascript中的eval函数来实现;

  (2)利用ScriptControl执行JavaScript脚本实现;

  (3)利用DataTable的计算功能实现简单计算;

  (4)利用.net动态编译功能来实现等

  这些方法在csdn的坛里有讨论,请见:

  心想既然还没有成熟的.net类库,何不自己做一个呢,其实并不难,只要稍有点耐心调试一下就好了。于是参考一编中缀表达式转后缀表达式的论文,很快写了一个,发现效果不错,所以发出来跟大家共享,希望对大家有用。

  中缀表达式转后缀表达式的步骤为:

  1.新建一个Stack栈,用来存放运算符

  2.新建一个post栈,用来存放最后的后缀表达式

  3.从左到右扫描中缀表达式:

  (1)若读到的是操作数,直接存入post栈,以#作为数字的结束

  (2)若读到的是(,则直接存入stack栈

  (3)若读到的是),则将stack栈中(前的所有运算符出栈,存入post栈

  (4)若读到的是其它运算符,则将该运算符和stack栈顶运算符作比较:若高于或等于栈顶运算符,则直接存入stack栈,否则将栈顶运算符(所有优先级高于读到的运算符的,不包括括号)出栈,存入post栈。最后将读到的运算符入栈。

  4.当扫描完后,stack栈中还在运算符时,则将所有的运算符出栈,存入post栈

  计算后缀表达式的值的步骤为:

  1.初始化一个空堆栈

  2.从左到右读入后缀表达式

  3.如果字符是一个操作数,把它压入堆栈。

  4.如果字符是个操作符,弹出两个操作数,执行恰当操作,然后把结果压入堆栈。如果您不能够弹出两个操作数,后缀表达式的语法就不正确。

  5.到后缀表达式末尾,从堆栈中弹出结果。若后缀表达式格式正确,那么堆栈应该为空。

  类库的名称就名为NEval ,感觉还比较健壮,速度很快,支持20个数学函数,很容易扩充。目前还没有表达式合法性检查的功能,有兴趣的朋友可以扩充一下,先谢谢。

  代码如下:

  代码

  调用代码如下:

  string expr = xt;

  NEval neval = new NEval();

  return al(expr);

唯美句子
单机资讯
中医美容
分享到: