중위 표기법을 후위표기법으로 변환하는걸 하는데 잘 안되네요
조회수 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]);
}
}
}
1 답변
-
무수한 엔터공백이 고민의 흔적이 보이네요 ``;
입력값
((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]); } } }
댓글 입력