#include<stdio.h>
#include<string.h>
char a[40];
int s[40]; //存整数
char p[40]; //存运算符
int i;//m为s[]下标,n为p下标
float x=0;
//=================================
//功能:判断是否为数字,若是返回1,否则返回0
//作者:史继炜
//时间:2019.3.22 20:43
int IsNum(char a)
{
if(a>='0'&&a<='9')
return 1;
return 0;
}
//=================================
//功能:判断是否为'+'或'-'或'*'或'/',若是返回1,否则返回0
//作者:史继炜
//时间:2019.3.22 20:43
int IsOp(char a)
{
if(a=='+'||a=='-'||a=='*'||a=='/')
return 1;
return 0;
}
//==================================
//功能:判断c为何种运算符,并返回x,y的运算值
//作者:史继炜
//时间:2019.3.22 20:43
float t(float x,int y,char c)
{
switch(c)
{
case '+':return x+y;
case '-':return x-y;
case '*':return x*y;
case '/':return x/y;
}
}
//==================================
//功能:将字符串中的整数和运算符提取出来,分别储存到s[]和p[]中
//作者:史继炜
//时间:2019.3.22 20:43
void f()
{
int m=0,n=0;
for(i=0;i<=strlen(a);i++)
if(IsNum(a[i])==1)
x=x*10+a[i]-'0';
else
{
s[m]=x;
p[n]=a[i];
x=0;
m++;
n++;
}
}
//=======================================================
//功能:合法性检验,若合法返回1,否则返回0
//作者:史继炜
//时间:2019.3.22 20:43
int hfx(char a[])
{
if(IsNum(a[0])==0) //字符串第一个元素是否为数字
return 0;
if(IsNum(a[strlen(a)-1])==0) //字符串最后一个元素是否为数字
return 0;
for(i=0;a[i]!='\0';i++) //判断字符串里是否有除数字和运算符之外其它字符
{
if(IsNum(a[i])==0&&IsOp(a[i])==0)
return 0;
}
for(i=1;i<strlen(a)-1;i++) //字符串中是否存在连续运算符
{
if(IsOp(a[i])&&IsOp(a[i+1]))
return 0;
}
for(i=0;a[i]!='\0';i++)//判断字符串是否为纯数字
{
if(IsOp(a[i]))
return 1;
}
return 0;
}
//======================================
int main()
{
int mm=0,nn=0;//为取值时s[]下标,nn为取值时p[]下标
int y;
char c;
while(1)
{
printf("输入一个字符串\n");
gets(a);
if(hfx(a))
break;
else
printf("输入有误,");
}
f();
x=s[0];
for(mm=1;s[mm]!='\0';mm++)
{
y=s[mm];
c=p[nn];
nn++;
x=t(x,y,c);
}
printf("%.2f",x);
return 0;
}
计算器v2,无bug版
猜你喜欢
转载自blog.csdn.net/weixin_44366851/article/details/88774744
今日推荐
周排行