【问题标题】:Preserving Parenthesis in Shunting Yard在调车场保留括号
【发布时间】:2011-10-11 21:36:55
【问题描述】:

我正在研究本质上是调车场算法,但将中缀移动到前缀而不是 RPN 我正在努力保留括号,而我正在经历一段魔鬼时期。目前我的代码是

        String s = inFixList.get(i);
        Stack<Character> opStack = new Stack<Character>();
        Stack<Character> solutionStack = new Stack<Character>();
        String solution = "";

        for(char c : s.toCharArray())
        {
            if(Character.isLetter(c)||Character.isDigit(c))
            {
                solutionStack.push(c);
            }
            else if(c == '(')
            {
                opStack.push(c);
                solutionStack.push(')');
            }
            else if(c == ')')
            {                   
                while(opStack.peek() != '(')
                {
                    solutionStack.push(opStack.pop());
                    solutionStack.push('(');
                }
                opStack.pop();
            }
            else if (!Character.isSpaceChar(c))
            {
                if(opStack.isEmpty())
                {
                    opStack.push(c);
                }                       
                else if(opStack.peek()!='(' &&(OPERATORS.indexOf(c) < OPERATORS.indexOf(opStack.peek())))
                {
                    opStack.push(c);
                }
                else if(!opStack.isEmpty()&&(opStack.peek()!='('))
                {
                    solutionStack.push(opStack.pop());
                    solutionStack.push('(');
                    opStack.push(c);

                }
                else
                {
                    opStack.push(c);
                }

            }
        }
        while(opStack.size() != 0)
        {
            solutionStack.push(opStack.pop());
            solutionStack.push('(');
        }
        while(!solutionStack.isEmpty())
        {
            solution+=solutionStack.pop();
        }

        System.out.println("Final Answer!"+solution);

这会正确输出左括号,但只有一种右括号。有人知道我应该在哪里添加它们吗?我发誓我错过了最后一个合乎逻辑的步骤......

【问题讨论】:

    标签: java string algorithm shunting-yard


    【解决方案1】:

    我不确定这是否是问题所在,但我在您编写的代码中注意到了

    else if(c == '(')
    {
       opStack.push(c);
       solutionStack.push(')');
    }
    

    你真的想在这里加一个右括号吗?推开括号似乎更合理,尽管我可能是错的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-01-24
      • 2017-07-06
      • 1970-01-01
      • 2021-10-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多