重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
小编这次要给大家分享的是C++怎么实现简单计算器功能,文章内容丰富,感兴趣的小伙伴可以来了解一下,希望大家阅读完这篇文章之后能够有所收获。
成都创新互联服务项目包括梅列网站建设、梅列网站制作、梅列网页制作以及梅列网络营销策划等。多年来,我们专注于互联网行业,利用自身积累的技术优势、行业经验、深度合作伙伴关系等,向广大中小型企业、政府机构等提供互联网行业的解决方案,梅列网站推广取得了明显的社会效益与经济效益。目前,我们服务的客户以成都为中心已经辐射到梅列省份的部分城市,未来相信会继续扩大服务区域并继续获得客户的支持与信任!
要求:输入一个包含+ - * /的非负整数计算表达式,计算表达式的值,每个字符之间需有一个空格,若一行输入为0,则退出程序。
输入样例:
4 + 2 * 5 - 7 / 11
输出样例:
13.36
实现代码:
#include#include using namespace std; char str[200];//保存表达式字符串 int mat[][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;//数字栈 void getOp(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; }else if(str[i]=='-'){ retn=2; }else if(str[i]=='*'){ retn=3; } else if(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; } int main(int argc, char *argv[]) { while(gets(str)){ if(str[0]=='0'&&str[1]==0) break; bool retop;int retnum; int idx=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 { double tmp; if(op.empty()==true||mat[retnum][op.top()]==1){ op.push(retnum); } else{ while(mat[retnum][op.top()]==0){ int ret=op.top(); op.pop(); double b=in.top(); in.pop(); double a=in.top(); in.pop(); if(ret==1) tmp=a+b; else if(ret==2) tmp=a-b; else if(ret==3) tmp=a*b; else tmp=a/b; in.push(tmp); } op.push(retnum); } } if(op.size()==2&&op.top()==0) break; } printf("%.2f\n",in.top()); } return 0; }
测试输出:
2 + 4 * 2 - 2
8.00
看完这篇关于C++怎么实现简单计算器功能的文章,如果觉得文章内容写得不错的话,可以把它分享出去给更多人看到。