计算器版本四,指针版
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int i;
//===========
//功能:判断数字,是数字返回1,否则返回0
//时间:2019.4.5
int ismun(char a)
{
if(a>='0'&&a<='9')
return 1;
return 0;
}
//=======================================
//功能:判断运算符,是运算符返回1,否则返回0
//时间:2019.4.5
int isop(char a)
{
if(a=='+'||a=='-'||a=='/'||a=='*')
return 1;
return 0;
}
//========================================
//功能:计算功能,返回运算结果
//时间:2019.4.5
double js(double x, double y, char a)
{
double t;
switch(a)
{
case '+':t=x+y;break;
case '-':t=x-y;break;
case '*':t=x*y;break;
case '/':t=x/y;break;
}
return t;
}
//=======================================
//功能:合法性函数,判断字符串合法性,合法返回1,否则返回1
//时间:2019.4.5
int check(char a[])//合法性
{
if(ismun(a[0])==0||ismun(a[strlen(a)-1])==0)//判断第一个和最后一个是否为数字
return 0;
for(i=0;a[i]!='\0';i++)
{
if((isop(a[i])==1&&isop(a[i+1])==1)||(a[i]=='.'&&isop(a[i+1]))||(isop(a[i])&&a[i+1]=='.'))//判断是否有连续运算符或.+和+.的情况
return 0;
if(isop(a[i])==0&&ismun(a[i])==0&&a[i]!='.')//除开运算符、数字、小数点是否存在其它字符
return 0;
}
int j; //判断是否存在2..2或2.2.222.2.2的情况
for(i=0;a[i]!='\0';i++)
{
if(a[i]=='.')
for(j=i+1;;j++)
{
if(isop(a[j])==1||a[j]=='\0')
break;
if(a[j]=='.')
return 0;
}
}
for(i=0;a[i]!='\0';i++)//是否为纯数字
{
if(isop(a[i])==1)
return 1;
}
return 0;
}
//========================================================
//功能:将字符串中的运算符和数字分别存在p[]和s[]中;并运算‘*’‘/’
//时间:2019.4.5
void qushu(char a[],double *s,char *p)
{
double y;
int m=1,n=0;
for(i=0; a[i]!='\0'; i++)
{
if(a[i]=='+'||a[i]=='-')
{
*(p+n)=a[i];//p[n]与*(p+n) 效果一样
*(s+m)=atof(&a[i+1]);
m++;
n++;
}
if(a[i]=='/')
{
y=atof(&a[i+1]);
*(s+m-1)=js(*(s+m-1),y,a[i]);
}
if(a[i]=='*')
{
y=atof(&a[i+1]);
*(s+m-1)=js(*(s+m-1),y,a[i]);
}
}
}
//===================================
int main()
{
char a[41];
double s[41];
char p[41];
int m=0,n=0;
//gets(a);
while (1)
{
scanf("%s",a);
if(check(a)==1)
break;
printf("重输\n");
}
s[0]=atof(a);
qushu(a, s, p);
double x=s[0];
for(m=1,n=0;s[m]!='\0';m++,n++)
{
x=js(x, s[m], p[n]);
}
printf("%.2f\n",x);
}
计算器版本四,指针版
猜你喜欢
转载自blog.csdn.net/weixin_44366851/article/details/89072595
今日推荐
周排行