美文网首页
C++实现简单的表达式类型的代码

C++实现简单的表达式类型的代码

作者: 简简单单咦 | 来源:发表于2020-06-08 10:55 被阅读0次

    下面内容段是关于C++实现简单的表达式类型的内容,应该能对码农有好处。

    #include<stdio.h>

    #include<stdlib.h>

    #include<malloc.h>

    #include<string.h>

    typedef enum

    {

    INT, CHAR

    typedef union

    {

    char vchar;

        int num;

    } ElemType;

    typedef struct BiTNode

    {

    typedef struct

    {

    } SqStack;

    {

    return 0;

    }

    {

    if(S.top == S.base) return 0;

    return 1;

    }

    {

    }

    return 1;

    }

    {

    return 1;

    }

    int StackEmpty(SqStack S)

    {

    if(S.top==S.base)

    return 1;

    else

    return 0;

    }

    void list();

    int getPreExpr();

    int Primary(char a,char b);

    void WriteExpr(BiTree E);

    int Check_Variable(BiTree E);

    float Operate(int a, char ope, int b);

    float Value(BiTree E);

    int main()

    {

    char choice;

    float value_result;

    while(1)

    {

    printf("请输入你的选择:");

    choice = getch();

    switch(choice)

    {

    case '1':

    if(getPreExpr())

    if(ReadExpr(&E))

    {

    isExist=1;

    printf("表达式构造成功!n");

    }

    printf("按任意键返回:");

    getch();

    break;

    case '2':

    {

    printf("n带括弧的中缀表达式为:");

    WriteExpr(E);

    }

    else

    printf("n没有成功构造表达式!");

    printf("n按任意键返回:");

    getch();

    break;

    case '3':

    {

    char next;

    do

    {

    int Assign_flag=0;

    int c;

    char V;

    printf("n表达式E为:");

    WriteExpr(E);

    printf("n请输入需要赋值的变量:");

    V=getchar();

    if((V>='a' && V<='z') || (V>='A' && V<='Z'))

    {

    printf("");

    }

    else

    {

    printf("请输入字母!");

    next = 'y';

    }

    printf("请输入需要赋给该变量的值:",V);

    scanf("%d",&c);

    Assign(&E,V,c,&Assign_flag);

    if(Assign_flag)

    {

    printf("赋值成功!n赋值后的表达式为:");

    WriteExpr(E);

    }

    else

    printf("赋值失败!可能表达式中没有此变量!");

    printf("n是否继续赋值?<y/n>");

    next = getch();

    }while(next=='y' || next=='Y');

    }

    else

    {

    printf("n没有成功构造表达式!");

    printf("n按任意键返回:");

    getch();

    }

    break;

    case '4':

    {

    printf("n算术表达式为:");

    WriteExpr(E);

    {

    value_result = Value(E);

    printf("n其值为:");

    printf("%.2f",value_result);

    }

    else

    printf("n表达式中仍存在没有赋值的变量!");

    }

    else

    printf("n没有成功构造表达式!");

    printf("n按任意键返回:");

    getch();

    break;

    case '0':

    printf("n感谢使用,再见!n按任意键退出:");

    getch();

    exit(0);

    break;

    }

    }

    return 0;

    }

    void list()

    {

    printf("------------------表达式类型的实现-----------------n");

    printf("          1.输入前缀表示式并构造表达式n");

    printf("          2.用带括弧的中级表示式输出表达式n");

    printf("          3.对表达式中的变量赋值n");

    printf("          4.对算术表达式求值n");

    printf("----------------------------------------------------n");

    }

    int getPreExpr()

    {

    printf("n请输入前缀表示式:");

    {

    printf("输入错误!表达式只有一个运算符!");

    return 0;

    }

    else if((preExpr[0] >= '0' && preExpr[0] <= '9') || (preExpr[0] >= 'a' && preExpr[0] <= 'z') || (preExpr[0] >= 'A' && preExpr[0] <= 'Z'))

    {

    printf("输入成功!表达式只有一个字符!");

    return 1;

    }

    else

    {

    printf("输入错误!输入无法识别");

    return 0;

    }

    else

    return 1;

    }

    {

    {

    char value[2];

    value[0] = preExpr[i];

    value[1] = '0';

    }

    {

    }

    }

    {

    SqStack S;

    BiTree p,q;

    {

    }

    else

    {

    for(i=1; i<len && !StackEmpty(S); i++)

    {

    p=(BiTree)malloc(sizeof(BiTNode));

    p->lchild = NULL;

    p->rchild = NULL;

    {

    {

    q->lchild=p;

    Push(&S,p);

    q=p;

    }

    {

    q->rchild=p;

    Push(&S,p);

    q=p;

    }

    }

    {

    if(!q->lchild)

    {

    q->lchild=p;

    Pop(&S,&q);

    }

    else

    {

    q->rchild=p;

    Pop(&S,&q);

    }

    }

    }

    if(StackEmpty(S) && i >= len)

    {

    return 1;

    }

    else

    {

    printf("n输入的表达式有误!");

    return 0;

    }

    }

    }

    int Primary(char a,char b)

    {

    {

    {

    return 0;

    else

    return 1;

    }

    else

    return 0;

    }

    else

    return 0;

    }

    void WriteExpr(BiTree E)

    {

    if(E)

    {

    {

    if(Primary(E->data.vchar,E->lchild->data.vchar))

    {

    printf("(");

    WriteExpr(E->lchild);

    printf(")");

    }

    else

    }

    if(E->type == INT)

    printf("%d",E->data.num);

    else

    printf("%c",E->data.vchar);

    {

    if(Primary(E->data.vchar,E->rchild->data.vchar))

    {

    printf("(");

    WriteExpr(E->rchild);

    printf(")");

    }

    else

    }

    else

    }

    }

    {

    {

    {

    }

    }

    }

    int Check_Variable(BiTree E)

    {

    if(E && E->type == CHAR)

    {

    return 0;

    if(Check_Variable(E->lchild))

    {

    }

    }

    else

    return 1;

    }

    float Operate(int a, char ope, int b)

    {

    switch(ope)

    {

    case '+': return (a+b); break;

    case '-': return (a-b); break;

    case '/': return (a/b); break;

        default : return 0;

    }

    }

    float Value(BiTree E)

    {

    {

    if(!E->lchild && !E->rchild && E->type == INT)

    return E->data.num;

    return Operate(Value(E->lchild),E->data.vchar,Value(E->rchild));

    }

    }

    相关文章

      网友评论

          本文标题:C++实现简单的表达式类型的代码

          本文链接:https://www.haomeiwen.com/subject/yvkltktx.html