求c++计算器程序代码

要求,能计算简单的加减乘除运算,以字符串方式输入,如输入‘123+4567’,回车后直接得结果‘4690’。本人学c++不到一个月,所以请达人尽量用简单的语句,谢谢。追加... 要求,能计算简单的加减乘除运算,以字符串方式输入,如输入‘123+4567’,回车后直接得结果‘4690’。本人学c++不到一个月,所以请达人尽量用简单的语句,谢谢。追加分。 展开
 我来答
Alpgalw
推荐于2016-12-04 · 超过21用户采纳过TA的回答
知道小有建树答主
回答量:64
采纳率:0%
帮助的人:60万
展开全部
//不好意思,贴错了,把这个简易计算器的token分析贴出来!丢脸了!
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<conio.h>
#include<math.h>
int resultprocess(char mexp[],double * result);
int tokenprocess(char mexp[],double shuzhi[],char signs[]);
double resultadd(double shuzhi[],char signs[],int sp);
void main()
{
char mexp[100];
double result=0;
printf("Please input the maths expression:\n\nmexp=");
gets(mexp);
if(resultprocess(mexp,&result))
printf("\nThe result of the maths expression is:\n\nresult=%lf\n",result);
else
printf("\nThe maths expression is wrong,can't be processed!");
getch();
}
int resultprocess(char mexp[],double * result)
{
char signs[100];
double shuzhi[100];
int sp;
sp=tokenprocess(mexp,shuzhi,signs);
if(sp>0)
{
*result=resultadd(shuzhi,signs,sp);
return 1;
}
else
return 0;
}
int tokenprocess(char mexp[],double shuzhi[],char signs[])
{
char strtemp[100],chartemp;
int shuzhiflag=0,spaceflag=0,dotflag=0,sp=0,i;
signs[0]='+';
for(i=0;mexp[i]!='\0';i++)
{
chartemp=mexp[i];
if(chartemp=='+'||chartemp=='-'||chartemp=='*'||chartemp=='/'||chartemp=='^')
{
if(shuzhiflag==0)
{
if(chartemp=='-'&&sp==0)
{
strtemp[shuzhiflag]=chartemp;
strtemp[shuzhiflag+1]='\0';
shuzhiflag++;
}
else
return 0;
}
else
{
shuzhi[sp]=atof(strtemp);
sp++;
shuzhiflag=0;
spaceflag=0;
dotflag=0;
signs[sp]=chartemp;
}
}
else
if(chartemp>='0'&&chartemp<='9')
{
if(spaceflag==2)
return 0;
else
{
strtemp[shuzhiflag]=chartemp;
strtemp[shuzhiflag+1]='\0';
shuzhiflag++;
}
}
else
if(chartemp=='.')
{
if(dotflag==1)
return 0;
else
if(dotflag==0&&shuzhiflag==0)
return 0;
else
{
dotflag=1;
strtemp[shuzhiflag]=chartemp;
strtemp[shuzhiflag+1]='\0';
shuzhiflag++;
}
}
else
if(chartemp==' ')
{
if(shuzhiflag>0)
spaceflag=2;
else
spaceflag=1;
}
else
return 0;
}
if(shuzhiflag>0)
{
shuzhi[sp]=atof(strtemp);
sp++;
return sp;
}
else
return 0;
}
double resultadd(double shuzhi[],char signs[],int sp)
{
int i;
double result=0;
for(i=1;i<sp;i++)
if(signs[i]=='^')
{
shuzhi[i]=pow(shuzhi[i-1],shuzhi[i]);
signs[i]='*';
shuzhi[i-1]=1;
}
for(i=1;i<sp;i++)
if(signs[i]=='*'||signs[i]=='/')
{
if(signs[i]=='*')
shuzhi[i]=shuzhi[i-1]*shuzhi[i];
else
shuzhi[i]=shuzhi[i-1]/shuzhi[i];
signs[i]=signs[i-1];
shuzhi[i-1]=0;
}
for(i=0;i<sp;i++)
{
if(signs[i]=='+')
result=result+shuzhi[i];
else
result=result-shuzhi[i];
}
return result;
}
肉肉的美食家
2020-05-16 · TA获得超过3808个赞
知道大有可为答主
回答量:3152
采纳率:30%
帮助的人:193万
展开全部
//不好意思,贴错了,把这个简易计算器的token分析贴出来!丢脸了!
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<conio.h>
#include<math.h>
int
resultprocess(char
mexp[],double
*
result);
int
tokenprocess(char
mexp[],double
shuzhi[],char
signs[]);
double
resultadd(double
shuzhi[],char
signs[],int
sp);
void
main()
{
char
mexp[100];
double
result=0;
printf("Please
input
the
maths
expression:\n\nmexp=");
gets(mexp);
if(resultprocess(mexp,&result))
printf("\nThe
result
of
the
maths
expression
is:\n\nresult=%lf\n",result);
else
printf("\nThe
maths
expression
is
wrong,can't
be
processed!");
getch();
}
int
resultprocess(char
mexp[],double
*
result)
{
char
signs[100];
double
shuzhi[100];
int
sp;
sp=tokenprocess(mexp,shuzhi,signs);
if(sp>0)
{
*result=resultadd(shuzhi,signs,sp);
return
1;
}
else
return
0;
}
int
tokenprocess(char
mexp[],double
shuzhi[],char
signs[])
{
char
strtemp[100],chartemp;
int
shuzhiflag=0,spaceflag=0,dotflag=0,sp=0,i;
signs[0]='+';
for(i=0;mexp[i]!='\0';i++)
{
chartemp=mexp[i];
if(chartemp=='+'||chartemp=='-'||chartemp=='*'||chartemp=='/'||chartemp=='^')
{
if(shuzhiflag==0)
{
if(chartemp=='-'&&sp==0)
{
strtemp[shuzhiflag]=chartemp;
strtemp[shuzhiflag+1]='\0';
shuzhiflag++;
}
else
return
0;
}
else
{
shuzhi[sp]=atof(strtemp);
sp++;
shuzhiflag=0;
spaceflag=0;
dotflag=0;
signs[sp]=chartemp;
}
}
else
if(chartemp>='0'&&chartemp<='9')
{
if(spaceflag==2)
return
0;
else
{
strtemp[shuzhiflag]=chartemp;
strtemp[shuzhiflag+1]='\0';
shuzhiflag++;
}
}
else
if(chartemp=='.')
{
if(dotflag==1)
return
0;
else
if(dotflag==0&&shuzhiflag==0)
return
0;
else
{
dotflag=1;
strtemp[shuzhiflag]=chartemp;
strtemp[shuzhiflag+1]='\0';
shuzhiflag++;
}
}
else
if(chartemp=='
')
{
if(shuzhiflag>0)
spaceflag=2;
else
spaceflag=1;
}
else
return
0;
}
if(shuzhiflag>0)
{
shuzhi[sp]=atof(strtemp);
sp++;
return
sp;
}
else
return
0;
}
double
resultadd(double
shuzhi[],char
signs[],int
sp)
{
int
i;
double
result=0;
for(i=1;i<sp;i++)
if(signs[i]=='^')
{
shuzhi[i]=pow(shuzhi[i-1],shuzhi[i]);
signs[i]='*';
shuzhi[i-1]=1;
}
for(i=1;i<sp;i++)
if(signs[i]=='*'||signs[i]=='/')
{
if(signs[i]=='*')
shuzhi[i]=shuzhi[i-1]*shuzhi[i];
else
shuzhi[i]=shuzhi[i-1]/shuzhi[i];
signs[i]=signs[i-1];
shuzhi[i-1]=0;
}
for(i=0;i<sp;i++)
{
if(signs[i]=='+')
result=result+shuzhi[i];
else
result=result-shuzhi[i];
}
return
result;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
蒲珺委良策
2019-04-13 · TA获得超过3604个赞
知道大有可为答主
回答量:3065
采纳率:33%
帮助的人:430万
展开全部
//不好意思,贴错了,把这个简易计算器的token分析贴出来!丢脸了!
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<conio.h>
#include<math.h>
int
resultprocess(char
mexp[],double
*
result);
int
tokenprocess(char
mexp[],double
shuzhi[],char
signs[]);
double
resultadd(double
shuzhi[],char
signs[],int
sp);
void
main()
{
char
mexp[100];
double
result=0;
printf("Please
input
the
maths
expression:\n\nmexp=");
gets(mexp);
if(resultprocess(mexp,&result))
printf("\nThe
result
of
the
maths
expression
is:\n\nresult=%lf\n",result);
else
printf("\nThe
maths
expression
is
wrong,can't
be
processed!");
getch();
}
int
resultprocess(char
mexp[],double
*
result)
{
char
signs[100];
double
shuzhi[100];
int
sp;
sp=tokenprocess(mexp,shuzhi,signs);
if(sp>0)
{
*result=resultadd(shuzhi,signs,sp);
return
1;
}
else
return
0;
}
int
tokenprocess(char
mexp[],double
shuzhi[],char
signs[])
{
char
strtemp[100],chartemp;
int
shuzhiflag=0,spaceflag=0,dotflag=0,sp=0,i;
signs[0]='+';
for(i=0;mexp[i]!='\0';i++)
{
chartemp=mexp[i];
if(chartemp=='+'||chartemp=='-'||chartemp=='*'||chartemp=='/'||chartemp=='^')
{
if(shuzhiflag==0)
{
if(chartemp=='-'&&sp==0)
{
strtemp[shuzhiflag]=chartemp;
strtemp[shuzhiflag+1]='\0';
shuzhiflag++;
}
else
return
0;
}
else
{
shuzhi[sp]=atof(strtemp);
sp++;
shuzhiflag=0;
spaceflag=0;
dotflag=0;
signs[sp]=chartemp;
}
}
else
if(chartemp>='0'&&chartemp<='9')
{
if(spaceflag==2)
return
0;
else
{
strtemp[shuzhiflag]=chartemp;
strtemp[shuzhiflag+1]='\0';
shuzhiflag++;
}
}
else
if(chartemp=='.')
{
if(dotflag==1)
return
0;
else
if(dotflag==0&&shuzhiflag==0)
return
0;
else
{
dotflag=1;
strtemp[shuzhiflag]=chartemp;
strtemp[shuzhiflag+1]='\0';
shuzhiflag++;
}
}
else
if(chartemp=='
')
{
if(shuzhiflag>0)
spaceflag=2;
else
spaceflag=1;
}
else
return
0;
}
if(shuzhiflag>0)
{
shuzhi[sp]=atof(strtemp);
sp++;
return
sp;
}
else
return
0;
}
double
resultadd(double
shuzhi[],char
signs[],int
sp)
{
int
i;
double
result=0;
for(i=1;i<sp;i++)
if(signs[i]=='^')
{
shuzhi[i]=pow(shuzhi[i-1],shuzhi[i]);
signs[i]='*';
shuzhi[i-1]=1;
}
for(i=1;i<sp;i++)
if(signs[i]=='*'||signs[i]=='/')
{
if(signs[i]=='*')
shuzhi[i]=shuzhi[i-1]*shuzhi[i];
else
shuzhi[i]=shuzhi[i-1]/shuzhi[i];
signs[i]=signs[i-1];
shuzhi[i-1]=0;
}
for(i=0;i<sp;i++)
{
if(signs[i]=='+')
result=result+shuzhi[i];
else
result=result-shuzhi[i];
}
return
result;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式