使用单个堆栈的中缀到后缀不适用于大于9的数字

时间:2012-12-10 19:32:47

标签: c++

我想将中缀转换为后缀表达式。

oki我得到了它的工作,但我很难搞清楚如果你输入像5 * 3 + -1.2然后如果你想要负数就不会工作。这是我的代码:

void infix2postfix(char* infix, char* postfix){
     char *in,*post;
        Stack<char>Q;
        char n;
        in = &infix[0];
        post = &postfix[0];
        while(*in){
            while(*in == ' ' || *in == '\t'){
                in++;
            }
            if( isdigit(*in) || isalpha(*in) ){
                while( isdigit(*in) || isalpha(*in)){
                    *post = *in;
                    post++;
                    in++;
                }
            }
            if( *in == '(' ){
                Q.Push(*in);
                in++;
            }
            if( *in == ')'){
                n = Q.Pop();
                while( n != '(' ){
                    *post = n;
                    post++;
                    n = Q.Pop();
                }
                in++;
            }
            if( operand(*in) ){
                if(Q.IsEmpty())
                    Q.Push(*in);
                else{
                    n = Q.Pop();
                    while(priority(n) >= priority(*in)){
                        *post = n;
                        post++;
                        n = Q.Pop();
                    }
                    Q.Push(n);
                    Q.Push(*in);
                }
                in++;
            }
        }
        while(!Q.IsEmpty())
        {
            n = Q.Pop();
            *post = n;
            post++;

        }
        *post = '\0';
    }

它有效,但我希望它能与一元运算符一起使用,因此需要输入4 * 5 + 4 + -1.2,因此每个数字之间都有一个空格,除非它是负-1.2。我的代码也不适用于大于9的整数,如果我放10则它只是乘以1 * 0。

1 个答案:

答案 0 :(得分:0)

如果遇到-,则必须检测这是否为运算符(减法)或否定。

我建议你查看上一个符号。如果前一个符号是运算符,那么' - '可能是否定的。