C++ 这个代码有意义吗?

C++ 这个代码有意义吗?,c++,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 i

什么是
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; 
} 
#包括
#包括
#包括
#定义最大值20
字符堆栈[MAX];
int top=-1;
char-pop();
无效推送(字符项);
int prcd(字符符号)
{ 
开关(符号)
{ 
格“+”:
案例'-':
返回2;
案例“*”:
案例“/”:
返回4;
案例‘^’:
案例“$”:
返回6;
格“(”:
案例“)”:
案例“#”:
返回1;
} 
} 
整数等运算符(字符符号)
{ 
开关(符号)
{
格“+”:
案例'-':
案例“*”:
案例“/”:
案例‘^’:
案例“$”:
格“(”:
案例“)”:
返回1;
违约:
返回0;
} 
} 
void convertip(字符中缀[],字符前缀[])
{ 
int i,符号,j=0;
炭试验[MAX];
中缀=strev(中缀);
堆栈[++top]='#';
对于(i=0;iprcd(堆栈[top]))
{ 
推(符号);
}
其他的
{ 

而(prcd(symbol)此代码可能会解释数字项,如.17+3*8。要正确计算此值,代码必须确定先取*然后取+。计算顺序由优先级规则设置:*和/在+和-之前

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

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

(,)和#的优先级最低。在这之后+和-的优先级最低。然后是*和/。最高优先级是^和$。

试着只放有趣的部分。这里的人不会读所有这些。你能把问题分成几个句子吗?简短回答:这是有意义的。这个问题与我身上的一个bug有关ta由于实际代码的格式有一些问题,我们中的一些人似乎正在试图解决这些问题。当你编写代码时,我试图从中获得一些意义,例如两个数字的和,有时我可以写返回b+c,我知道代码中有b和c,返回类型是和,但在这段代码中,我confused@MildredShimz:谢谢s我得到了这个意思,我感到很困惑,虽然很奇怪,因为括号的优先级最高,但是(and)不是运算符,它们只是用来解析表达式。你可以说,在(and)不存在的地方使用运算符优先级来表示它们应该插入的位置。@CashCow这就是我修改答案的原因“可能解释数字术语”。这似乎是函数名所暗示的某种优先级。