PTA 7 - 1 표현 식 변환 - 표현 식 트 리

1629 단어 데이터 구조
7-1 표현 식 변환 분 하 다
산술 표현 식 은 접두사 표현법, 접두사 표현법 과 접두사 표현법 등 형식 이 있다.일상적으로 사용 하 는 산술 표현 식 은 두 개의 연산 수 중간 에 있 는 접두사 표현법, 즉 이원 연산 자 를 사용한다.디자인 프로그램 에서 접미사 표현 식 을 접미사 표현 식 으로 변환 하 십시오.
입력 형식:
한 줄 에 빈 칸 이 없 는 접두사 표현 식 을 입력 하 십시오.
출력 형식:
한 줄 에서 변 환 된 접미사 표현 식 을 출력 하려 면 서로 다른 대상 (연산 수, 연산 기호) 사이 에 빈 칸 으로 구분 해 야 하지만 끝 에 빈 칸 이 있어 서 는 안 됩 니 다.
입력 예시:
2+3*(7-4)+8/4

출력 예시:
2 3 7 4 - * + 8 4 / +

사고: 표현 식 트 리 를 직접 설치 하고 두 자리 이상 의 숫자 와 음 수 를 표시 할 수 있 는 지 확인 하 세 요.
#include 
#include 
using namespace std;
int flag;
void output(char *str, int l, int r) {
    bool exist = false;
    int cnt = 0, pos1 = -1, pos2 = -1;
    for (int i = l; i <= r; i++) {
        switch (str[i]) {
        case '(': cnt++; exist = true; break;
        case ')': cnt--; exist = true; break;
        case '*': case '/': exist = true; if (!cnt) pos2 = i; break;
        case '+': case '-': if (i != l) { exist = true; if (!cnt) pos1 = i; } break;
        }
    }
    if (!exist) { if (flag++) printf(" "); for (int i = (str[l] == '+' ? l + 1 : l); i <= r; i++) printf("%c", str[i]); return; }
    if (pos1 == -1) pos1 = pos2; if (pos1 == -1) { output(str, l + 1, r - 1); return; }
    output(str, l, pos1 - 1); output(str, pos1 + 1, r);
    if (flag++) printf(" "); printf("%c", str[pos1]);
}
int main() {
    char str[100]; scanf("%s", str + 1); int n = strlen(str + 1);
    flag = 0; output(str, 1, n);
    return 0;
}

좋은 웹페이지 즐겨찾기