繁体   English   中英

在C中评估PostFix表达式(新发行)

[英]Evaluating a PostFix Expression in C (New Issue)

我的上一个问题可以在这里找到(只想向这个最有用的社区提供保证,我不会尝试发送垃圾邮件):

在C中评估后缀表达式

我的问题涉及评估后缀表达式。 说我有一个后缀表达式,例如:

3 2 1 2 + ^ ^

我试图将值(所有用户以字符串形式输入)存储在堆栈中,并通过使用其他函数进行评估,最终结果是堆栈中唯一要弹出的剩余元素并提出。 经过几个小时摆弄代码块中的调试器后,我发现该函数未在堆栈中存储任何内容。 此外,当我使用函数检查指向的字符是否为操作数时(尽管是一个操作数),它会忽略应采取的适当操作。 这也是我所包含的is​​Operand函数使用的代码:

bool isOperand(char *str)
{
    /** For value 3, str seems to be the entire character string
    being "3 2 1 2 + ^ ^" **/
    return isdigit(str) != 0;
}

int evaluatePostfix(char *postfixStr)
{
    stack * s;
    int x, y, z;

    stackInit(&s);

    while(postfixStr != NULL) {
        /** For the first value 3, it SHOULD be an operand and
        proceed to push it on the stack. But it just skips
        this condition. **/
        if(isOperand(postfixStr)) {
            stackPush(&s, postfixStr);
        }

        if(isOperator(postfixStr) == 1) {
            y = atoi(stackPop(&s));
            x = atoi(stackPop(&s));
            char *str = malloc(10 * sizeof(char));
            sprintf(str, "%d", applyOperator(x, y, postfixStr));
            stackPush(&s, str);
        }
        ++postfixStr;
    }

    z = stackPop(s);
    stackDestroy(&s);
    return z;
}

我不知道如何在指针处仅将其发送一个值。 如果是两位甚至三位数字,我该如何告诉程序识别出来? 再次感谢您的宝贵时间,我当然感谢人们提供的所有帮助。

****编辑/解决方案****

好吧,由于我还不是“新用户”,所以我不能回答自己的问题,因此,我将编辑原始帖子,以便将来将来对其他人有用。

似乎令牌化在这里是适当的情况。 通过使用

strtok( 字符串分隔符

该函数将一个字符串分解为较小的字符串,这些字符串之间用空格分隔,似乎是空字符。 我仍然不确定100%是否是因为我使用了字符串空间的定界符(又名“”),但是无论如何。

结束循环

令牌= strtok(NULL,“”);

而不是将指针增加1的效果就足够了,因为它似乎在获取原始字符串并在通过将较小的字符串部分从堆栈中完全删除而将较小的字符串部分推入堆栈时直接对其进行修改。 虽然不是一个好习惯(因为我应该创建原始字符串的副本以保持输入的完整性并改为修改副本),但我相信它将在此项目的范围内起作用。 我只是想分享我的发现,以防将来对任何人有用。 另外,如果我的使用说明中有某些事情需要加以纠正,我想知道。

您在指针上调用isdigit

return isdigit(str) != 0;

那应该被指点者

return isdigit(*str) != 0; // or, equivalently: return isdigit(*str);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM