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这就是我修改答案的原因“可能解释数字术语”。这似乎是函数名所暗示的某种优先级。