C++ 中缀的前缀不能给出正确的结果
我有一个非常简单的算法,它接受RPN字符串并将其转换为中缀:C++ 中缀的前缀不能给出正确的结果,c++,algorithm,C++,Algorithm,我有一个非常简单的算法,它接受RPN字符串并将其转换为中缀: for(unsigned int i = 0; i < tokens.size(); i++) { token = tokens[i]; if(!isOperator(token)) { stack.push(token); } else { //need at leas
for(unsigned int i = 0; i < tokens.size(); i++)
{
token = tokens[i];
if(!isOperator(token))
{
stack.push(token);
}
else
{
//need at least 2 values
string a = stack.pop();
string b = stack.pop();
string expr = "(" + a + token + b + ")";
stack.push(expr);
}
}
string converted = stack.pop();
中缀看起来像:
(3+((4*2)/((1-5)^(2^3))))
这是正确的
我修改了此选项以使用前缀:
for(int i = tokens.size() - 1; i >= 0; i--)
{
token = tokens[i];
if(!isOperator(token))
{
stack.push(token);
}
else
{
//need at least 2 values
string a = stack.pop();
string b = stack.pop();
string expr = "(" + a + token + b + ")";
stack.push(expr);
}
}
但结果略有不同:
给定前缀:
+ 3 * 4 / 2 ^ ^ - 1 5 2 3
我得到了中缀:
(3+(4*(2/(((1-5)^2)^3))))
这有点错误。我不知道为什么4乘以表达式的另一部分而不是2
有人能告诉我可能出了什么问题吗
谢谢您的算法是正确的。您得到了错误的答案,因为您的测试输入错误 相应中缀的前缀应为
+ 3 / * 4 2 ^ - 1 5 ^ 2 3
关于我推荐的(波兰符号)的信息
+ 3 / * 4 2 ^ - 1 5 ^ 2 3