我必须构建一个 C 程序,使用 STACK 将中缀表示法转换为后缀表示法。进展顺利,并且在某种程度上发挥了作用。上次我使用 C 语言是很久以前的事了,所以我可能不会很好地使用 char[] 变量。
所以问题是当我这样输入时:
A+B*(C*E-D)
我的程序返回这个:
ABCE*D-*+ĚĚĚĚĚĚĚĚĚĚĚ
如您所见,我的程序很好地完成了后缀转换,但我的结果中有一堆“垃圾”字符(ĚĚĚĚĚĚĚĚĚĚĚĚ)。
这是我的代码片段(只有我认为不正确的部分,可能是 char[] 以及我如何为 postfix[] 变量赋值的方式:
int main()
{
char infix[20], postfix[20];
int len, tip, i, p=0;
STACK pom;
MAKE_NULL(&pom);
printf ("Unesi izraz.\n");
scanf ("%s", infix);
len = strlen(infix);
for(i=0; i<len; i++)
{
tip = nadi_tip(infix[i]);
if (tip == Lijeva)
{
PUSH (infix[i], &pom);
}
if (tip == Operand)
{
postfix[p] = infix[i];
p++;
}
if (tip == Desna)
{
while (!EMPTY(pom) && (TOP(pom)!= '('))
{
postfix[p++] = TOP(pom);
POP (&pom);
}
POP (&pom);
}
if (tip == Operator)
{
while (!EMPTY(pom) && TOP(pom)!= '(')
{
if(prioritet(infix[i]) <= prioritet(TOP(pom)))
{
postfix[p++] = TOP(pom);
POP (&pom);
}
else break;
}
PUSH(infix[i], &pom);
}
}
while (EMPTY(pom) != 1)
{
postfix[p++] = TOP(pom);
POP(&pom);
}
printf("Izlaz: %s", postfix);
return 0;
}
infix[] 是我的输入,postfix[] 是我的输出。我做错了什么我为什么会有 ĚĚĚĚĚĚĚĚĚĚĚĚ 字符。先感谢您!