접미사 표현 식 을 접미사 표현 식 으로 변환 (자바 구현)
19014 단어 연습 문제
먼저 두 개의 데이터 구 조 를 정의 합 니 다.
사 칙 연산 우선 순위:
접미사 식 을 접미사 식 으로 변환 하 는 자바 코드 는 다음 과 같 습 니 다.
import java.util.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Main {
public static void main(String[] args) {
System.out.println(calcu("3+4*5+(6*7+8)*9"));
// : 345*+67*8+9*+
}
//
public static String calcu(String s ) {
Stack<Character> stack = new Stack<>();
Pattern p = Pattern.compile("\\d");
StringBuilder result = new StringBuilder();
for (int i = 0; i < s.length(); i++) {
char c = s.charAt(i);
Matcher m = p.matcher(c+"");
//
if (m.find()) {
result.append(c+"");
// System.out.println(c);
continue;
}
/* StringBuilder,
,
, :
A. , StringBuilder
B. +-* /( ,
1. ,
2. c, s
a. c s, ;
b. c s, s; 2. , a
, , 1. c ;
c. (,
C. ) ,
1. StringBuilder,
2. StringBuilder, ( )
D. , , StringBuilder
*/
if (c == '+' || c == '-' || c == '*'
|| c == '/' || c == '(') {
if (stack.isEmpty()) {
stack.push(c);
continue;
} else {
boolean flag = true;
while (flag) {
if (stack.isEmpty() || conLevel(c) > conLevel(stack.peek()) || stack.peek() == '(') {
stack.push(c);
flag = false;
continue;
}
if (conLevel(c) <= conLevel(stack.peek())) {
// System.out.println(stack.pop());
result.append(stack.pop());
}
}
}
}
if (c == ')') {
while (stack.peek() != '(') {
// System.out.println(stack.pop());
result.append(stack.pop());
}
stack.pop(); // ,
continue;
}
}
// ,
while (!stack.isEmpty()){
// System.out.println(stack.pop());
result.append(stack.pop());
}
return result.toString();
}
//
public static int conLevel (char c) {
int i = 0;
switch (c) {
case '+' :
i = 1;
break;
case '-' :
i = 1;
break;
case '*' :
i = 2;
break;
case '/' :
i = 2;
break;
case '(' :
i = 3;
break;
case ')' :
i = 0;
break;
default: i = -1;
}
return i;
}
}
참고:http://www.nowamagic.net/librarys/veda/detail/2307 https://www.cnblogs.com/zhengxunjie/p/10372329.html
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
20번째 클릭 네모난 블록 표시 그림Document table</span><span class="token punctuation">{ </span> <span class="token property">background</span><span class...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.