C++计算器
来源:互联网 发布:js 刷新当前界面 编辑:程序博客网 时间:2024/04/29 16:50
#include<iostream>using namespace std;#define MAXSIZE 100float readnum(char *f, int *i);//bool CalculateSuffix(char *f, double *sum);int priority(char op){switch(op){case'\0': return -1;case'(':return 0;case'-':case'+':return 1;case'*':case'/':return 2;default:return -1;}}//-------------中缀表达式—>后缀表达式------------------bool InfixtoSuffix(char *e,char *f){if(e==NULL || f==NULL) return false; //|| (e[0]=='\0')) return false;if(e[0]=='\0') return false;char opst[MAXSIZE]; //操作栈int top=0;int t;opst[top++]='\0';int i=0, j=0;while(e[i]!='\0'){switch(e[i]){ case'0': case'1': case'2':case'3': case'4': case'5': case'6': case'7': case'8': case'9': case'.': f[j++]=e[i++];break; case'(': opst[top++]=e[i++];break;case')': t = top-1;while(t>=0 && opst[t] != '('){f[j++] = opst[--top];t = top-1;}if(t<0) {f[j++]='\0'; return false;}top--;i++;break; case'+': case'-':case'*': case'/': f[j++]=' ';while( priority ( opst[top-1] ) >= priority (e[i]) )f[j++] = opst[--top];opst[top++]=e[i++];break; default:f[j++] = '\0';return false;}}while(top)f[j++]=opst[--top];f[j]='\0';return true;}//------------字符串 转换成 数值-------------float readnum(char *f, int *i){float x=0.0;int k=0;while(f[*i] >='0' && f[*i]<='9'){x = x * 10 +(f[*i]-'0');(*i)++;}if(f[*i]=='.') //处理小数部分{(*i)++;while(f[*i] >='0' && f[*i]<='9'){x = x * 10 +(f[*i]-'0'); (*i)++;k++; //记录小数位数}}while(k != 0){x =x/10.0;k--;}return x;}bool CalculateSuffix(char *f, double *sum){double obst[MAXSIZE];int top=0;int i= 0;double x1, x2;while(f[i]!='\0'){switch(f[i]){case'0': case'1': case'2': case'3': case'4': case'5': case'6': case'7': case'8': case'9': obst[top++] = readnum(f, &i); break; case' ': i++; break; case'+': if(top<2) return false; x2 = obst[--top];x1 = obst[--top];obst[top++] = x1 + x2;i++;break; case'-':if(top<2) return false; x2 = obst[--top];x1 = obst[--top];obst[top++] = x1 - x2;i++;break; case'*':if(top<2) return false; x2 = obst[--top];x1 = obst[--top];obst[top++] = x1 * x2;i++;break; case'/': if(top<2) return false; x2 = obst[--top];x1 = obst[--top];obst[top++] = x1 / x2;i++;break; default: return false;}}*sum = obst[--top];if(top!=0)return false;return true;}//-------------------------------------------------------int main(){char e[MAXSIZE], f[MAXSIZE];char ch='Y';while(ch=='Y' || ch =='y'){cout<<"请输入一个中缀表达式:"<<endl;cin>>e;if(InfixtoSuffix(e,f)==true)cout<<"该中缀表达式的后缀表达式为:"<<f<<endl;else {cout<<"无效的中缀表达式"<<endl;cout<<"是否继续?(y)\n";cin>>ch;continue;}double sum;if(CalculateSuffix(f, &sum)==true)cout<<"该表达式的结果为:"<<sum<<endl;else cout<<"无法计算的中缀表达式"<<endl;cout<<"是否继续?(y/n)\n";cin>>ch;}return 0;}
0 0
- 计算器.c
- 【C#】计算器
- C/C++:找零计算器
- C/C++:计算器
- c语言实现计算器
- windows c 计算器
- C的简易计算器
- 基本计算器(C#)
- C bulider计算器初步
- 计算器c语言代码
- C++-------实现计算器
- 简单计算器实现(C++)
- C#My计算器源代码
- C语言极简版计算器
- 计算器实现(c++)
- C语言极简版计算器
- C语言简易计算器
- C#--加法计算器
- Mac OS X 下 NDK 开发
- teradata数据仓库
- 2014年编程之美初赛第一场-活动中心
- linux下的几个cd命令
- Go语言 Go加密之RSA
- C++计算器
- 黑马程序员--- 学习笔记(第二十五天)
- 堆排序
- 标准程序库中带异常处理的栈实现
- java xml面试题
- cocos2d-x 3.0 安装及创建项目
- 解决Eclipse中文乱码
- 每天坐6小时以上,死亡率会增高——但站着工作就管用吗?
- 调试基础