在一定数量的循环之后,数组未被赋予char

时间:2015-02-16 10:36:53

标签: c arrays infix-notation

我正在编写中缀到postfix函数的过程中。在它循环几次(第8或第9个循环)之后,我的后缀数组将不再接受任何其他字符(它设置为100)。

void convertToPost(char infix[], char postfix[])
{
    StackNode *pMem=NULL;
    int i=-1,j=0, priority=0,priorityStack=0,operandCounter=0;
    push(&pMem,'(');


    infix[strlen(infix)]=')';

    printf("%s\n",infix);

    for(j=0;j<strlen(infix);j++)
    {
        putchar('\n');
        printf("infix[%d]: %s\n",j,infix);
        printf("postfix[%d]: %s\n",j,postfix);
        putchar('\n');

        if(infix[j] <= 57 && infix[j] >= 48)
        {
            i++;
            postfix[i]=infix[j]; // not assigning value 8 to postfix
            i++;
            postfix[i] = ' ';    

        }
        else if(infix[j] == '(')
        {
            push(&pMem,infix[j]);
            //pop(&pMem);
        }
        else if(infix[j] == ')')
        {
            while(pMem->pNext != NULL)
            {
                if(pMem->pString == '(')
                {
                    pop(&pMem);
                }
                else
                {
                    postfix[i]= ' ';
                    i++;
                    postfix[i] = pMem->pString;
                    i++;
                    pop(&pMem);
                }// figure out how to take char from top of stack and put in postfix something pop()
                //push(&pMem,'(');
            }
            push(&pMem,'(');
            //pop(&pMem);
        }
        else if(infix[j] == '+' || infix[j] == '-' || infix[j] == '^' || infix[j] == '*' || infix[j] == '/' || infix[j] == '%')
        {
            //i--;
            if(operandCounter==0)
            {
                push(&pMem,infix[j]);
                operandCounter++;
            }
            else
            {
                priority=Precedence(infix[j]);
                priorityStack=Precedence(pMem->pString);//pString is empty
                if(priority >= priorityStack)
                {
                    if(pMem->pString != '(')
                    {
                        i++;
                        postfix[i]=pMem->pString;
                        i++;
                        postfix[i]=' ';
                        pop(&pMem);
                        push(&pMem,infix[j]);
                    }
                    else
                    {
                        push(&pMem,infix[j]);
                    }
                }
            }

        }

    }
}

这是我使用的示例等式:9 *(5-4)+2/6 其输出应为:(9 5 4 - * 2 6 / +)

我先发表评论问题。它在达到这一点后持续不断。例如,当我运行代码时,它返回:9 5 4 - *

但不提供错误代码或任何内容。

如果您想要其他一些功能(即优先级,推送,弹出),请随时询问。

1 个答案:

答案 0 :(得分:0)

<{1}}中的

for loop()值未定义。因为要替换字符串中的终止NULL字符。strlen(infix)这导致infix[strlen(infix)]=')';返回未定义的值。

所以改变

strlen()

 infix[strlen(infix)]=')';

还要确保为阵列分配了足够的内存,以便数组中的 int len = strlen(infix); infix[len]=')'; infix[len+1] = '\0'; 索引不会超出边界访问权限。