我有一个非常简单的算法,它接受一个RPN字符串并将其转换为中缀:
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();
但是,我的RPN字符串中也有指数。
以下是RPN示例:
3 4 2 * 1 5 - 2 3 ^ ^ / +
Infix看起来像:
(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。
有人能指出我可能出错的地方吗?
由于
答案 0 :(得分:1)