을 접미사에하기는 무시됩니다,하지만 경우 될 것 같지 않습니다 예를 들면 다음과 같습니다.자바 RPN (역 폴란드 표기법) 중위 '('나는 스택은 PRN 및 구축에 사용되는 것을 확신
- 입력 1 52+ (1 + 2) * 4-3
- 입력 2 52 + (+ 2 (1) * 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<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();
}
내가 입력 1 및 제 3 일하고 싶어한다고 가정하면, 내가 어떤 방법을 사용 하는가?
편집 : '+', '-', '*'및 '/'가 변경되면 해당 입력에 적용됩니다.
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();
}
그렇게하지해야 당신의 산출물 1과 2가 정확하다고 생각하십시오 : * 앞에 -, 그래서 그것은'52 1 2 + 4 * 3 - +'이어야합니다, 그렇지 않아야합니까? – butterchicken
또한이 링크에서 Java inix to rpn 변환기를 확인할 수 있습니다. http://andreinc.net/2010/10/05/converting-infix-to-rpn-shunting-yard-algorithm/. Python과 Java에서 알고리즘 shunting-yard 알고리즘의 단순화 된 버전입니다. –
[스택을 사용하는 접미사에 중위 어] (http://stackoverflow.com/questions/7455862/infix-to-postfix-using-stacks)와 다른 것의 중복 – EJP