Estoy bastante seguro de que las pilas se utilizan para la construcción de PRN y '(' se ignoran, pero no parece ser el caso, por ejemplo:.Java RPN (notación polaca inversa) infija a Postfix
- de entrada 1: 52+ (1 + 2) * 4-3
- de entrada 2: 52 + ((1 + 2) * 4) -3
- de entrada 3: (52 + 1 +2) * 4-3
La entrada 1 y la salida 2 deben ser iguales, y la entrada 1 y la entrada 3 deben ser diferentes. salida
- 1: 52 1 2 + 4 3 - * +
- salida 2: 52 1 2 + 4 * 3 - +
- salida 3: 52 1 2 + 4 3 - * +
public static String Infix2(String input) {
char[] in = input.toCharArray();
Stack<Character> stack = new Stack<Character>();
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();
}
Suponiendo que quiero entrada 1 y 3 también para trabajar, qué enfoque se debe usar?
edit: Después de los cambios '+', '-', '*' y '/' funcionaron para las entradas dadas.
public static String Infix2(String input) {
if (input == null)
return "";
char[] in = input.toCharArray();
Stack<Character> stack = new Stack<Character>();
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();
}
no lo hago piense que su salida 1 y 2 son correctas: * precede a -, entonces debería ser '52 1 2 + 4 * 3 - +', ¿no es así? – butterchicken
También puede consultar este enlace para un infijo java a convertidor rpn: http://andreinc.net/2010/10/05/converting-infix-to-rpn-shunting-yard-algorithm/. Es una versión simplificada del algoritmo algoritmo de yarda de derivación en python y Java. –
Duplicado de [Infix a Postfix usando stacks] (http://stackoverflow.com/questions/7455862/infix-to-postfix-using-stacks), y muchos otros – EJP