簡體   English   中英

堆疊后綴到后綴

[英]Stack infix to postfix

我的代碼運行良好,令我驚訝! 唯一的問題是,每當我使用帶括號的中綴輸入時,它都會在后綴表達式的末尾出現一個“ J”! 有什么建議么?? 這里的算法是所有表達式都將被轉換並且基本正確的基本算法,但是尾部的“ J”是我無法理解的! 建議?

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<ctype.h>

#define MAX 50

char stack[MAX];

int top = -1;

void push(char element)
{
    stack[++top] = element;
}

char pop()
{
    return(stack[top--]);
}

char tope()
{
    return(stack[top]);
}

int prec(char c)
{
    switch(c){
        case '+':
        case '-' : return 1;
                    break;
        case '*' :
        case '/' : return 2;
                   break;
        default:
                   return 0;
                   break;
        }
}

int main()
{

    char post[MAX],in[MAX],ch,element;
    printf("Infix expression : ");
    scanf("%s",in);

    int i=0,k=0;

    in[strlen(in)] = ')';
    push('(');

    while((ch = in[i++]) != '\0')
    {
        if(isalnum(ch))
            post[k++] = ch;
        if(ch == '(') 
            push(ch);
        if(ch == ')')
        {
            while(tope() != '(')
            {
                post[k++] = pop();
            }
            pop();
        }
        if(ch == '+' || ch =='-' || ch == '*' || ch == '/')
        {
            while(prec(ch) <= prec(tope()))
            {
                post[k++] = pop();
            }
            push(ch);
        }
    }
    post[k] = '\0';

    printf("%s",post);

    return 0;




}
in[strlen(in)] = ')';

覆蓋以nul結尾的字符,該字符在打印時解釋奇怪的字符(僅在碰巧遇到另一個nul字符時打印才會停止:未定義的行為,如果in 50字節緩沖區中未找到nul字符,甚至可能導致崩潰)

您必須移動它,例如:

int l = strlen(in);
in[l] = ')';
in[l+1] = '\0';

注意:您必須將字符串的長度存儲在l而不是兩次調用strlen(in) ,這不僅是因為性能下降,而且因為加上括號意味着strlen在您以null終止之前無法正常工作。

(您也可能想像這樣保護您的scanfscanf("%48s",in);因此,您一定要為50大小的緩沖區scanf("%48s",in);出足夠的空間來容納額外的括號,甚至與您的宏定義兼容,請參見scanf:模板,其中包含宏(#define常量

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM