Мне пришлось создать программу 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[] — мой вывод. Что я сделал не так я почему у меня есть символы ĚĚĚĚĚĚĚĚĚĚĚĚĚĚĚĚĚĚĚĚ. Заранее спасибо!