-6

このコードで実際に返さreturn 4 return 2 return 6れることは意味をなさない

#include<stdio.h> 
#include<conio.h> 
#include<string.h> 
#define MAX 20 

char stack[MAX]; 
int top = -1; 
char pop(); 
void push(char item); 

int prcd(char symbol) 
{ 
    switch(symbol) 
    { 
    case '+': 
    case '-': 
        return 2; 
    case '*': 
    case '/': 
        return 4; 
    case '^': 
    case '$': 
        return 6; 
    case '(': 
    case ')': 
    case '#': 
        return 1; 
    } 
} 

int isoperator(char symbol) 
{ 
    switch(symbol) 
    {
    case '+': 
    case '-': 
    case '*': 
    case '/': 
    case '^': 
    case '$': 
    case '(': 
    case ')': 
        return 1; 
    default: 
        return 0; 
    } 
} 

void convertip(char infix[],char prefix[]) 
{ 
    int i,symbol,j=0; 
    char test[MAX]; 

    infix=strrev(infix); 
    stack[++top]='#'; 

    for(i=0;i<strlen(infix);i++) 
    { 
        symbol=infix[i]; 
        if(isoperator(symbol)==0) 
        { 
            prefix[j]=symbol; 
            j++; 
        }
        else 
        { 
            if(symbol==')') 
            { 
                push(symbol); 
            } 
            else if(symbol=='(') 
            {    
                while(stack[top]!=')') 
                { 
                    prefix[j]=pop(); 
                    j++; 
                }    

                pop();//pop out (. 
            } 
            else 
            { 
                if(prcd(symbol)>prcd(stack[top])) 
                { 
                    push(symbol); 
                }
                else 
                { 
                    while(prcd(symbol)<=prcd(stack[top])) 
                    { 
                        prefix[j]=pop(); 
                        j++; 
                    } 
                    push(symbol); 
                }//end of else. 
            }//end of else. 
        }//end of else. 
    }//end of for. 

    while(stack[top]!='#') 
    { 
        prefix[j]=pop(); 
        j++; 
    } 

    prefix[j]='\0';//null terminate string. 
    prefix=strrev(prefix); 

} 

int main() 
{ 
    char infix[20],prefix[20]; 
    //clrscr(); 
    printf("Enter the valid infix string:\n"); 
    gets(infix); 
    convertip(infix,prefix); 
    printf("The corresponding prefix string is:\n"); 
    puts(prefix); 
    getch(); 

    return 0; 
} 

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

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

1 に答える 1

1

このコードは、数値用語を解釈する場合があります。17 + 3 * 8. これを適切に計算するには、コードは最初に * を取り、次に + を取るように決定する必要があります。評価の順序は、優先順位規則によって設定されます: * と / は + と - の前に来ます。

ステートメントは、優先コードのreturnように見えます。

  • (, ), #:return 1
  • +、-:return 2
  • *、/:return 4
  • ^、$:return 6

(, ) と # の優先順位が最も低くなります。その後、+ と - の優先順位が次に低くなります。その後、* と / が続きます。最も優先順位が高いのは ^ と $ です。

于 2012-10-30T09:26:46.343 に答える