计算器v2,无bug版

#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;
}

猜你喜欢

转载自blog.csdn.net/weixin_44366851/article/details/88774744