Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 中缀的前缀不能给出正确的结果_C++_Algorithm - Fatal编程技术网

C++ 中缀的前缀不能给出正确的结果

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

我有一个非常简单的算法,它接受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();
中缀看起来像:

(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