express

#include<stdio.h>
int isoperator(char x){
    if(x=='+'||x=='-'||x=='*'||x=='/'||x=='^')
        return 1;
    return  0;
}
int isfuhao(char a){//判断读进来的字符是哪种类型的,数字.字母.运算符
    if(a>='0'&&a<='9')
        return 0;
    else
        if(isoperator(a))
           return 1;
    else
         return  2;
}
typedef struct exp{
        int   value;
        char  ch;
        struct exp   *lchild;
        struct exp   *rchild;
        struct exp   *father;
}exp;
void iniexp(exp *a){
     a = (exp *)malloc(sizeof(exp));
     a->value = -1;
     a->lchild=a->rchild=NULL;

exp* insert2(exp *e1,exp *e2,int a){
    while(a == 0||a == 2){
         if(e1->lchild == NULL){
                e1->lchild = e2;
                e2->father = e1;
                return  e1;
            }   
         else
            if(e1->lchild!=NULL&&e1->rchild == NULL){
                e1->rchild = e2;
                e2->father = e1;
                return e1;
            }   
        else
            if(e1->lchild == NULL&&e1->rchild ==NULL) 
                 e1 = e1->father;
    } 
    while(a == 1){
        if(e1->lchild == NULL){
                e1->lchild = e2;
                e2->father = e1;
                return  e2;
            }
        else
            if(e1->lchild!=NULL&&e1->rchild == NULL){
                e1->rchild = e2;
                e2->father = e1;
                return e2;
            }
        else
            if(e1->lchild == NULL&&e1->rchild ==NULL) 
                 e1 = e1->father;     
    }   

exp readexp(){
    exp  *exp1,*exp3;
    exp  exp2;
    char  ex;
    iniexp(&exp2);
    while (scanf("%d",&ex)){
        int a = isfuhao(ex);
        if(a==0&&(char)ex!=';'){
             if(exp2.value==-1){
                   exp2.ch = ex;
                   exp2.value = (int)ex;
                   exp1 = &exp2;
              }    
              exp3 = (exp *)malloc(sizeof(exp));
              exp3->ch = (char)ex;
              exp3->value = (int)ex;
              exp1 = insert2(exp1,exp3,a);
        }
        else
             if(a == 1&&(char)ex!=';'){
                 if(exp2.value==-1){
                   exp2.ch = ex;
                   exp2.value = -2;
                   exp1 = &exp2;
                 } 
                exp3 = (exp *)malloc(sizeof(exp));
                exp3->ch = (char)ex;
                exp3->value = -2;
                exp1 = insert2(exp1,exp3,a);
         } 
        else
             if(a == 2&&(char)ex==';'){  
                 exp3 = (exp *)malloc(sizeof(exp));
                 exp3->ch = (char)ex;
                 exp3->value = 0;
                 exp1 = insert2(exp1,exp3,a);
             }   
        else
             if((char)ex==';')
                  return exp2;
    }
}
void writeexp(exp e){
    int a;
    a = isfuhao(e.ch);
    printf("%d",a);/*
    if(a==1){
        writeexp(e.lchild);
        printf("(%s",e.ch);
        writeexp(e.rchild);
    }
    else
        if(a==0||a==2)
            printf("%S",e.ch);
      */         
}   
main(){
     printf("以波兰表达式的形式输入表达式,数字大于-1,小于10/n");
     printf("以;号表示表达式输入的结束/n"); 
     exp E1;
     E1 = readexp();
     writeexp(E1);
     system("pause");
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值