首页 c++实现计算器的方法和代码

c++实现计算器的方法和代码

举报
开通vip

c++实现计算器的方法和代码 c++实现计算器的方法和代码 学习各种外挂制作技术,马上去百度搜索 """"魔鬼作坊"""" 点击第一个站进入、快 速成为做挂达人。 昨天写了一个文章,中缀表达式转后缀表达式,现在就用这个方式再实现计算器…… 表达式一旦转换成后缀表达式再进行计算就简单的不得了。遇到一个符号就弹出离他最 近的两个操作数然后进行这个操作符指定的运算就ok 了……运算完成后压栈继续扫描,依 次重复……等到操作符没有了。所有的运算也就结束了。结果也就出来了……不必再判断优 先级的什么的了。括号什么的也一并省略……爽吧。 其...

c++实现计算器的方法和代码
c++实现计算器的方法和代码 学习各种外挂制作技术,马上去百度搜索 """"魔鬼作坊"""" 点击第一个站进入、快 速成为做挂达人。 昨天写了一个文章,中缀表达式转后缀表达式,现在就用这个方式再实现计算器…… 表达式一旦转换成后缀表达式再进行计算就简单的不得了。遇到一个符号就弹出离他最 近的两个操作数然后进行这个操作符指定的运算就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-'0') + num*10; if (++i >= len) break; ch = exp.at(i); } opd.push(num); // 操作数入栈 } else // 操作符就判断并压栈 { if (ch == '(') // 左括号直接压栈 opt.push(ch); else if (ch == ')') // 有括号就弹栈到直到遇到左括号 { ch = opt.top(); // 取得栈顶操作符 while(ch != '(') // 直到弹出左括号 { OP(ch); opt.pop(); ch = opt.top(); } opt.pop(); // 弹出左括号 } else { int thisPri = GetPri(ch); // 当前操作符优先级 char prevOpt = opt.top(); // 上一个操作符 int prevPri = GetPri(prevOpt); // 上一个操作符优先级 while (thisPri <= prevPri) { //输出栈中的操作符直到遇到比当前的操作符优先级更低的 OP(prevOpt); opt.pop(); // 输出后就弹出 prevOpt = opt.top(); prevPri = GetPri(prevOpt); } opt.push(ch); //当前操作符压栈 } i++; } } char ch = opt.top(); // 表达式扫描完后把栈中剩余的操作符全部输出 while (ch != '#') { OP(ch); opt.pop(); ch = opt.top(); } 看到没有和昨天的代码几乎没有区别,只是在昨天 输出的地方换成了运算 OP(const char &ch); 完成运算 要明白一点。表达式扫描完成,有可能操作符是压栈了而未进行运行,(这由具体的表 达式决定),因此最后要把操作符栈弹空,完成全部的运算……则此时操作数栈中的唯一的 一个数就是运行结果了。 函数OP.实现如下。 参数 ch 是操作符 void Caculator::OP(const char &ch) { long RightOperand = opd.top(); opd.pop(); long LeftOperand = opd.top(); // 这两个操作数的顺序不能错 opd.pop(); switch(ch) { case '+': LeftOperand += RightOperand; break; case '-': LeftOperand -= RightOperand; break; case '*': LeftOperand *= RightOperand; break; case '/': if (RightOperand == 0) // 除数为 0 { cout<<"大哥啊,除数为0了!"< opd; // 只能进行整数的 运算 简单吧…… 关键是把表达式转换成后缀的…… 这个实现中未对表达式是否合法进行判断,所以非法的表达式会造成程序崩溃……表达 式的检查也可以在扫描的过程中完成的。
本文档为【c++实现计算器的方法和代码】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_265274
暂无简介~
格式:pdf
大小:93KB
软件:PDF阅读器
页数:3
分类:互联网
上传时间:2012-09-12
浏览量:174