我正在尝试编写一个评估后缀算术表达式的程序。该程序向我的函数发送一个字符串evaluatePostfix
,该函数继续识别操作数和运算符并得出一个整数解。我在这个程序中操作堆栈,方法是在识别时推送扫描的字符,当然在需要评估时执行适当的弹出函数。但现在,我遇到了一个问题,程序挂在似乎是无限循环的地方。我想我不确定如何告诉函数在评估第一个字符后继续处理字符串中的下一个字符。另一件需要注意的是,用户在每个操作数和运算符之间放置一个空格。这是我的功能:
int evaluatePostfix(char *postfixStr)
{
stack * s;
int x, y;
stackInit(&s);
do {
if(isOperand(postfixStr) == 1) {
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);
}
} while (postfixStr != NULL);
return stackPop(s);
}
我知道操纵堆栈的函数是正确的,因为它们是由我的导师提供的。有人可以给我一个关于我缺少什么的线索吗?