我很确定,堆栈用于构建PRN,而’(’会被忽略,但事实并非如此。例如:
输入1: 52+(1 + 2)* 4-3
输入 2:52 +(((1 + 2)* 4)-3
输入3: (52 + 1 + 2)* 4-3
输入1和输入2的输出应该相同,输入1和输入3的应该不同。
输出 1:52 1 2 + 4 3-* +
输出 2:52 1 2 + 4 * 3-+
输出 3:52 1 2 + 4 3-* +public static String Infix2(String input) {
char[] in = input.toCharArray();
Stack stack = new Stack();
StringBuilder out = new StringBuilder();
for (int i = 0; i < in.length; i++)
switch (in[i]) {
case '+':
case '*':
case '-':
out.append(' ');
stack.push(in[i]);
break;
case ' ':
case '(':
break;
case ')':
out.append(' ');
out.append(stack.pop());
break;
default:
out.append(in[i]);
break;
}
while (!stack.isEmpty()) {
out.append(' ');
out.append(stack.pop());
}
return out.toString();
}
假设我还希望输入1和输入3也起作用,我应该使用哪种方法?
编辑:更改后,“ +”,“-”,“ *”和“ /”适用于给定的输入。
public static String Infix2(String input) {
if (input == null)
return "";
char[] in = input.toCharArray();
Stack stack = new Stack();
StringBuilder out = new StringBuilder();
for (int i = 0; i < in.length; i++)
switch (in[i]) {
case '+':
case '-':
while (!stack.empty()
&& (stack.peek() == '*' || stack.peek() == '/'))
out.append(' ').append(stack.pop());
case '*':
case '/':
out.append(' ');
case '(':
stack.push(in[i]);
case ' ':
break;
case ')':
while (!stack.empty() && stack.peek() != '(')
out.append(' ').append(stack.pop());
if (!stack.empty())
stack.pop();
break;
default:
out.append(in[i]);
break;
}
while (!stack.isEmpty())
out.append(' ').append(stack.pop());
return out.toString();
}