解析到RPN两个方程给出相同的符号但有不同的答案
题
我在PHP中编写了一个解析器,它根据来自之前的问题。在测试它时,我发现了两个不同的方程式,它们在RPN中解析相同的东西。因为当你解决它们时,它们在RPN中的结果是相同的,你会得到相同的答案。
- 3 + 4 * 8 /(1-5)
- 3 + 4 * 8 / 1-5 醇>
两者最终都是348 * 15 - / +,当得到解决时给出-5的答案,这对第一个答案是正确的,但第二个的答案应该是30。
所以我误解了如何转换为RPN?我的解析器的代码可以在上一个问题的链接中找到。
解决方案
我在解析器中发现了错误。在您的上一个大 else
块中,您需要替换
$current = end($stack);
if($operators[$tokens[$i]] == $operators[$current]) {
$rpn .= array_pop($stack);
$stack[] = $tokens[$i];
} else {
$stack[] = $tokens[$i];
}
与
while(!empty($stack) && end($stack) != '(' && $operators[$tokens[$i]] >= $operators[end($stack)]) {
$rpn .= array_pop($stack);
}
$stack[] = $tokens[$i];
在更改之后,您的两个测试用例在这里工作正常。 (我使用此参考来修复您的代码。我在之后停止检查您的代码解决问题中的问题,因此内部可能存在更多错误 - 我没有证明 - 读取所有内容!)
编辑:重要的是替换“==”使用“> =”。如果你总是只有两个优先级,那么用一个循环替换 if
并不是绝对必要的。
不隶属于 StackOverflow