중위 표기법을 후위표기법으로 변환하는걸 하는데 잘 안되네요

조회수 858회
#include <stdio.h>
char stack[14] = "((9/2)*(4-2))";

int top = -1;

void h_push(int in)
{
        top++;
        stack[top] = in;

}
int h_pop()
{

        int out;

        out = stack[top];
        top--;

        return out;

}


int main() {

    char input = 0;
    char outpop;

    int i;

    for (int i = 0; i<14; i++) {


        switch (stack[i])
        {
        case '(':
            break;
        case ')':
            outpop = h_pop();
            printf("%c", input);
            break;
        case '*':
            input = '*';
            h_push(input);
            break;
        case '-':
            input = '-';
            h_push(input);
            break;
        case '/':
            input = '/';
            h_push(input);
            break;
        default:
            printf("%c", stack[top]);





        }

    }
}
  • 도움 주실수 있나요?? dhdhdhdhdh 2021.5.25 21:23

1 답변

  • 좋아요

    0

    싫어요
    채택 취소하기

    무수한 엔터공백이 고민의 흔적이 보이네요 ``;

    입력값((9/2)*(4-2)) 이 있는 공간을 스택으로 활용하시는건 아닌거 같아요

    별도 .. 스택공간 만들어주시고... 기존 님이 짜신 코드의 방향처럼 ) 일때는 스택을 쏵 뱉어내시고 +-/* 일시에는 스택에 쌓으시면서 스택의 크기만 증가 시키면 될거 같아요 ㅎ

    조금만 더 고민했으면 해결됬을거라 생각하고있찌만 코딩/전산기초에 익숙치 않으면 어려울수있을거같다고 생각되네여

    #include <stdio.h>
    char stack[14];
    char text[14] = "((9/2)*(4-2))";
    
    int top = -1;
    void h_push(char in)
    {
            top++;
            stack[top] = in;
    }
    int h_pop()
    {
            int out;
            out = stack[top];
            top--;
            return out;
    }
    
    int main() {
        int stacksize = 0;
        char out;
        for (int i = 0; i<14; i++) {
            switch (text[i])
            {
            case '(':
                break;
            case ')':
                for (int j=stacksize; j>0; j--) {
                    out = h_pop();
                    printf("%c", out);
                }
                stacksize = 0;
                break;
            case '*':
                h_push(text[i]);
                stacksize += 1;
                break;
            case '-':
                h_push(text[i]);
                stacksize += 1;
                break;
            case '/':
                h_push(text[i]);
                stacksize += 1;
                break;
            default:
                printf("%c", text[i]);
            }
        }
    }
    
    • 아 이제 이해가 됬네요 감사합니다 dhdhdhdhdh 2021.6.1 19:07

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)