计算器版本四,指针版

计算器版本四,指针版
#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