以前写过一个计算器 发表在此博客中(现在已删除)
实现的太过于拉杂,今天再看的时候都不好意思了.代码写的乱七八糟,拉杂不堪,EvaluateExp()看了一会儿都不明白自己是怎吗实现的..估计以前看到这代码的童鞋更加迷茫...嘿嘿.不好意思
昨天写了一个文章,中缀表达式转后缀表达式, http://blog.csdn.net/qiuchengw/archive/2008/10/04/3016286.aspx
现在就用这个方式再实现计算器..
表达式一旦转换成后缀表达式再进行计算就简单的不得了.遇到一个符号就弹出离他最近的两个操作数然后进行这个操作符指定的运算就ok了...运算完成后压栈继续扫描,依次重复...等到操作符没有了.所有的运算也就结束了.结果也就出来了...不必再判断优先级的什么的了.括号什么的也一并省略..爽吧.
其实在中缀转后缀的时候就可以进行计算,表达式扫描完成,计算完成.
把昨天的代码直接复制..修改..
- opt.push('#');
- int len = exp.length();
- for (int i = 0; i < len;)
- {
- char ch = exp.at(i);
- if (isalnum(ch))
- {
- long num = 0;
- while (isalnum(ch)) //转换为整数
- {
- num = (ch-