C++实现简单计算器功能
C++实现简单计算器的具体代码,供大家参考,具体内容如下
要求:输入一个包含+-*/的非负整数计算表达式,计算表达式的值,每个字符之间需有一个空格,若一行输入为0,则退出程序。
输入样例:
4+2*5-7/11
输出样例:
13.36
实现代码:
#include#include usingnamespacestd; charstr[200];//保存表达式字符串 intmat[][5]={//设置优先级1表示优先级较大,0表示较小 1,0,0,0,0, 1,0,0,0,0, 1,0,0,0,0, 1,1,1,0,0, 1,1,1,0,0, }; stack op;//运算符栈 stack in;//数字栈 voidgetOp(bool&reto,int&retn,int&i){ if(i==0&&op.empty()==true){ reto=true; retn=0; return; } if(str[i]==0){ reto=true; retn=0; return; } if(str[i]>='0'&&str[i]<='9'){ reto=false; }else{ reto=true; if(str[i]=='+'){ retn=1; }elseif(str[i]=='-'){ retn=2; }elseif(str[i]=='*'){ retn=3; } elseif(str[i]=='/'){ retn=4; } i+=2; return; } retn=0; for(;str[i]!=''&&str[i]!=0;i++){ retn*=10; retn+=str[i]-'0'; } if(str[i]==''){ i++; } return; } intmain(intargc,char*argv[]) { while(gets(str)){ if(str[0]=='0'&&str[1]==0)break; boolretop;intretnum; intidx=0; while(!op.empty())op.pop(); while(!in.empty())in.pop(); while(true){ getOp(retop,retnum,idx); if(retop==false){ in.push((double)retnum); } else{ doubletmp; if(op.empty()==true||mat[retnum][op.top()]==1){ op.push(retnum); } else{ while(mat[retnum][op.top()]==0){ intret=op.top(); op.pop(); doubleb=in.top(); in.pop(); doublea=in.top(); in.pop(); if(ret==1)tmp=a+b; elseif(ret==2)tmp=a-b; elseif(ret==3)tmp=a*b; elsetmp=a/b; in.push(tmp); } op.push(retnum); } } if(op.size()==2&&op.top()==0)break; } printf("%.2f\n",in.top()); } return0; }
测试输出:
2+4*2-2
8.00
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。