这段代码有意义吗?

时间:2012-10-30 09:21:18

标签: c++

这段代码中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; 
} 

1 个答案:

答案 0 :(得分:1)

此代码可能会解释数字术语,例如。 17 + 3 * 8.要正确计算,代码必须确定首先取*,然后取+。评估顺序由优先规则设置:*和/来自+和 - 。

return语句看起来像一些优先级代码。

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

(,)和#的优先级最低。在那之后+和 - 具有下一个最低优先级。然后是*和/。最高优先级是^和$。