C语言数据结构之简易计算器
本文实例为大家分享了C语言简易计算器的具体代码,供大家参考,具体内容如下
主要解决了处理负数、小数等的基础运算操作,无图形界面
#include#include usingnamespacestd; classCalculator{ private: intPriority(charfuhao); doubleCalSuffix(stringPostfixExp); public: doubleCalculate(stringInfixExp); stringInfixToSuffix(stringInfixExp); }; doubleCalculator::CalSuffix(stringPostfixExp){ doubletmpresult,ch1,ch2; doubletmpnum,tmpxiaoshu=1; inti=0,tmpdashu; intisfu=0;/// stack stk2; while(PostfixExp[i]!='\0'){ isfu=0;/// if(PostfixExp[i]>=48&&PostfixExp[i]<=57){ if(PostfixExp[i-1]=='-'){///// isfu=1; } tmpxiaoshu=1; tmpdashu=10; tmpnum=PostfixExp[i]-48; while(PostfixExp[++i]>=48&&PostfixExp[i]<=57){ tmpnum=tmpnum*tmpdashu+(PostfixExp[i]-48); } i=i-1; if(PostfixExp[++i]=='.'){ while(PostfixExp[++i]>=48&&PostfixExp[i]<=57){ tmpxiaoshu=tmpxiaoshu*0.1; tmpnum=tmpnum+(PostfixExp[i]-48)*tmpxiaoshu; } i=i-1; } else{ i=i-1; } if(isfu){//// tmpnum=tmpnum*(-1); } stk2.push(tmpnum); } elseif(PostfixExp[i]=='&'||PostfixExp[i]==''){ } else{ if(PostfixExp[++i]>=48&&PostfixExp[i]<=57){ i=i-1; } else{ i=i-1; ch2=stk2.top(); stk2.pop(); ch1=stk2.top(); stk2.pop(); switch(PostfixExp[i]){ case'+':tmpnum=ch1+ch2;break; case'-':tmpnum=ch1-ch2;break; case'*':tmpnum=ch1*ch2;break; case'/':tmpnum=ch1/ch2; if(ch2==0)cout<<"除数为零";break; } stk2.push(tmpnum); } } i++; } if(stk2.empty()!=1){ tmpresult=stk2.top(); stk2.pop(); } returntmpresult; } doubleCalculator::Calculate(stringInfixExp){ doubleresult; result=CalSuffix(InfixToSuffix(InfixExp)); returnresult; } intCalculator::Priority(charfuhao){ switch(fuhao){ case'+': case'-':return2; case'*': case'/':return3; case'(': case')':return1; default: return0; } } stringCalculator::InfixToSuffix(stringInfixExp){ stack stk; stringPostfixExp=""; inti=0,j=0; chartmpfuhao; intflag=0;//判断多位数的头数是否为零 while(InfixExp[i]!='\0'){ if(InfixExp[i]>=48&&InfixExp[i]<=57){ flag=0; PostfixExp[j++]='&'; PostfixExp[j++]=InfixExp[i]; if(InfixExp[i]=='0'){ flag=1; } while(InfixExp[++i]>=48&&InfixExp[i]<=57){ if(flag==0) PostfixExp[j++]=InfixExp[i]; else cout<<"输入错误数字"; } i=i-1; if(InfixExp[++i]=='.'){ PostfixExp[j++]='.'; while(InfixExp[++i]>=48&&InfixExp[i]<=57){ PostfixExp[j++]=InfixExp[i]; } i=i-1; } else{ i=i-1; } } elseif(InfixExp[i]=='('){ stk.push(InfixExp[i]); } elseif(InfixExp[i]==')'){ if(stk.empty()){ cout<<"表达式错误!"; } else{ tmpfuhao=stk.top(); while(tmpfuhao!='('){ if(stk.empty()){ cout<<"表达式错误!"; } else{ PostfixExp[j++]='&'; PostfixExp[j++]=tmpfuhao; stk.pop(); tmpfuhao=stk.top(); } } stk.pop(); } } elseif(InfixExp[i]=='+'||InfixExp[i]=='-'||InfixExp[i]=='*'||InfixExp[i]=='/'){ if(i==0||((InfixExp[--i]<48||InfixExp[i]>57)&&InfixExp[i]!=')')){ i++; PostfixExp[j++]='&'; PostfixExp[j++]='-'; while(InfixExp[++i]>=48&&InfixExp[i]<=57){ PostfixExp[j++]=InfixExp[i]; } i=i-1; if(InfixExp[++i]=='.'){ PostfixExp[j++]='.'; while(InfixExp[++i]>=48&&InfixExp[i]<=57){ PostfixExp[j++]=InfixExp[i]; } i=i-1; } else{ i=i-1; } } else{ i++; if(stk.empty()){ stk.push(InfixExp[i]); } else{ tmpfuhao=stk.top(); if(Priority(tmpfuhao) =Priority(InfixExp[i])){ PostfixExp[j++]='&'; PostfixExp[j++]=tmpfuhao; stk.pop(); if(stk.empty()!=1){ tmpfuhao=stk.top(); } elsebreak; } stk.push(InfixExp[i]); } } } } else{ cout<<"符号错误!"; break; } i++; } while(!stk.empty()){ tmpfuhao=stk.top(); PostfixExp[j++]='&'; PostfixExp[j++]=tmpfuhao; stk.pop(); } PostfixExp[j++]='\0'; returnPostfixExp; } intmain(intargc,constchar*argv[]){ stringa; Calculatora1; cin>>a; cout< 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。