gpt4 book ai didi

c - 评估 C 中的 PostFix 表达式(新问题)

转载 作者:行者123 更新时间:2023-11-30 15:58:55 26 4
gpt4 key购买 nike

我之前的问题可以在这里找到(只是想向这个最有帮助的社区保证我不会试图垃圾邮件问题):

Evaluating a postfix Expression in C

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

3 2 1 2 + ^ ^

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

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(string, delimiter)

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

结束循环

token = strtok(NULL, " ");

而不是将指针增加 1 效果很好,因为它似乎在通过从原始字符串中完全删除较小的字符串部分将较小的字符串部分插入堆栈时直接修改它,从而获取原始字符串。虽然这不是一个好的做法(因为我应该创建原始字符串的副本以保留我认为的输入的完整性并修改副本),但我相信它适用于该项目的范围。我只是想分享我的发现,以防将来对任何人有用。另外,如果我的使用描述中有一些需要纠正的地方,无论如何,我很想知道。

最佳答案

您正在对指针调用 isdigit

return isdigit(str) != 0;

应该在受指点上调用,

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

关于c - 评估 C 中的 PostFix 表达式(新问题),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9353702/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com