C/C++完成简单二元计算式功能
来源:网络收集 点击: 时间:2024-03-11首先建立一个程序的整体框架:
#includestdio.h
#includestring.h
#includestdlib.h
int compute(const char*,int*);//函数声明
int main()
{
char buf;//输入的存储空间
printf(Please input:\n);
gets(buf);
int result;//计算结果
int state=compute(buf,result);//调用函数
if(state==0)
printf(The result is %d.\n,result);//输出结果
else if(state==-1)
printf(The format your input is wrong!\n);
system(pause);
return 0;
}
其中包括计算函数的声明,该compute函数主要完成输入字符串的转换以及计算。buf用来存储输入字符串,result用于存放计算结果。

完成compute函数的编写,完整的函数如下:
int compute(const char* str,int* res)
{
int num1=0;
int num2=0;
int num=0;
int computeSign=0;
int computeSignStart=0;
char sign;
while(1)
{
if(*str=0*str=9)
{
num=num*10+*str-0;
computeSignStart=1;
}
else if(*str==+||*str==-||*str==*||*str==/||*str==0)
{
if(*str==+||*str==-||*str==*||*str==/)
sign=*str;
if(computeSignStart)
{
computeSign++;
computeSignStart=0;
}
if(computeSign==1)//第一个操作数
{
num1=num;
num=0;
}
else if(computeSign==2)//第二个操作数
{
num2=num;
num=0;
}
if(*str==0)
break;
}
else if(*str!= )
{
return -1;
}
str++;
}
switch(sign)
{
case+:*res=num1+num2;break;
case-:*res=num1-num2;break;
case*:*res=num1*num2;break;
case/:*res=num1/num2;break;
}
return 0;
}
首先定义几个变量,num1用于存储第一个计算数,num2用于存储第二个计算数,num用于暂存从字符串中截取出来的计算数,然后根据标志赋值给两个计算数,computeSignStart用于标志是否截取的数字,computeSign用于标志是第几个计算数,sign用于存储操作数。

下面的while循环主要用于从字符串中提取出两个操作数和操作符,同时忽略空格,如果输入的字符串中有错误的字符程序将会返回。
思路是:
1.如果是连续的数字,程序将会转化为数字并存放在num中,同时将computeSignStart置为1,表示已经记录到数字。

2.如果不是数字而是操作符或者是字符串结束符,则判断将操作符存储在sign,然后如果已记录到数字,再根据computeSign判断是第几个操作数,然后赋值给它,如果是结束符则程序推出。

3.如果是除空格外的其它字符程序返回并报错。

最后根据操作数和操作符计算出结果并返回,这里采用的是swith语句。

运行结果演示如下。

版权声明:
1、本文系转载,版权归原作者所有,旨在传递信息,不代表看本站的观点和立场。
2、本站仅提供信息发布平台,不承担相关法律责任。
3、若侵犯您的版权或隐私,请联系本站管理员删除。
4、文章链接:http://www.1haoku.cn/art_314169.html