【发布时间】:2012-08-19 18:36:07
【问题描述】:
我一直在寻找用波兰语前缀表示法评估表达式的递归解决方案,但没有找到,但我找到了伪代码,我想将它翻译成 C++,但这很难。我在不知道该怎么做的地方写了 BIG LETTERS。请纠正我,我是 java 人,对我来说 C++ 是一团糟,但我无能为力。
int preEval(stack<string> stos){
string el = "";
if(stos.empty()){
return 0;
}else if(stos.top() IS VALUE){
string el = stos.top();
stos.pop();
return atoi(el.c_str());
}else if(stos.top() IS OPERATOR){
int x = preEval(stos);
int y = preEval(stos);
return x OPERATOR y;
}
return 0;
}
编辑
当我有像 / 10 5 这样的表达式时,堆栈应该假设有元素(从顶部)/10 5,还是 5 10 /?只是问,因为如果我想在 / 10 5 中使用它,我必须以某种方式向后读取字符串。
【问题讨论】:
-
将我们链接到您找到的原始伪代码,也许是您想要实现的确切描述?
-
在进入需要替换的大写之前,有一个bug:处理运算符时,需要调用
stos.pop()before 递归,否则你将有一个无限循环。 -
顺便说一句,我认为
stos.empty()的情况一定是错误的,否则* 1会解析成功。 -
strtol 可用于查看字符串是否为整数。
-
好吧,堆栈可能不是合适的结构。我会改用
list。实际上,在/ 10 5中,您应该首先看到/,然后看到10,最后看到5,使用list会更自然。
标签: c++ parsing expression evaluation