#include<stdio.h>
#include<string.h>
char a[40];
int s[40]; //存整数
char p[40]; //存运算符
int i,m=0,n=0;//m为s[]下标,n为p下标/**/ m,n应该拿到f()中**
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()
{
for(i=0;i<=strlen(a);i++)
if(IsNum(a[i])==1)
{
x=x*10+a[i]-'0';
continue;
}
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;
}
f();
if(strlen(p)==0) //判断字符串是否为纯数字
return 0;
return 1;
}
//======================================
int main()
{
int mm=0,nn=0;/为取值时s[]下标,nn为取值时p[]下标
float y;
char c;
while(1)
{
printf("输入一个字符串\n");
gets(a);
if(hfx(a))
break;
printf("输入有误,");
}
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;
}
计算器版本二,有bug版
猜你喜欢
转载自blog.csdn.net/weixin_44366851/article/details/88764506
今日推荐
周排行