我正在研究什么本质上是分流码算法,但是将中缀移动到前缀而不是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);
这会正确输出左括号,但只有一种右括号。有没有人知道我应该在哪里添加它们?我发誓,我错过了最后一步的合理步骤......
答案 0 :(得分:0)
我不确定这是不是问题,但我在你的代码中注意到你写了
else if(c == '(')
{
opStack.push(c);
solutionStack.push(')');
}
你真的想在这里推一个近似的括号吗?推开括号似乎更合理,但我可能错了。