게시판 즐겨찾기
편집
드래그 앤 드롭으로
즐겨찾기 아이콘 위치 수정이 가능합니다.
중위 후위 변환 소스 질문입니다.
게시물ID : programmer_2105짧은주소 복사하기
작성자 : mo190
추천 : 0
조회수 : 612회
댓글수 : 4개
등록시간 : 2014/03/25 01:23:42
#include<stdio.h>
#include<stdlib.h>
#include<ctype.h>
#include<memory.h>
#include<string.h>

#define PLUS_MINUS 1
#define MUL_DIV 2
#define Lp_Rp 0

int top = 0;

int prior(char c)
{
int pri=0;
switch(c)
{
case '+' :
pri = PLUS_MINUS;
break;
case '-' :
pri = PLUS_MINUS;
break;
case '*' :
pri = MUL_DIV;
break;
case '/' :
pri = MUL_DIV;
break;
case '(' :
pri = Lp_Rp;
break;
case ')' :
pri = Lp_Rp;
break;
}
return pri;
}

void push(char *arr, char c)
{
top++;
arr[top]=c;
}

void pop(char *arr)
{
if(arr[top] == '(' || arr[top] == ')')
top--;
else
printf("%c",arr[top--]);
}

int main()
{
 int i=0;
 char str[20];
 char stack[20];
 

  memset(str,0,20);
  memset(stack,0,20);
 
printf("수식을 입력하세요 : ");
scanf("%s", str);
printf("친거 :%s\n",str);

for(i=0 ; i
{
if( isdigit(str[i]) )//숫자일 경우
{
printf("%c", str[i]);
}
else if ( i==(strlen(str)-1) ) //배열의 끝 19에 도달하면 arr[19]일때
{
while( top!=0 ) //stack에 있는 모든 원소 출력  
pop(stack);
}
else //문자일 경우
{
if ( str[i] == '(' || str[i] == ')' )  // 괄호일 때 괄호를 스택에 넣어주고 )일경우에는 (까지 다  팝 시키는 이프문
{
push(stack, str[i]);
if ( str[i] == ')' )
{

while ( stack[top] != '(' )
pop(stack);
pop(stack); // ( 를 출력
}
}
else if( top > 0 && prior(str[i]) <= prior(stack[top]) ) //stack에 연산자 있고, 새로 들어온 것이 스택보다 같거나 작으면 팝
{
pop(stack);
push(stack,str[i]);
}
else //연산자 우선순위가 높으면 무조건 push 
{
push(stack, str[i]);
}
}
}
 
 return 0;
}



임의의 숫자 20을 배열의 길이로 넣고 중위를 후위로 변환중입니다.
strlen을 이용해서 i를 20번 다 돌리고
그 중간에 else if를 사용해서 입력한 부분까지 i가 도착하면 stack에 들어있는 모든 연산자를 뽑아주려는데
1+2 를 치면 +가 안나오고 1+2-3을 치면 -가 안나오네요. 
마지막 스택에 있는 연산자가 나오질 않는 것 같은데 원인을 알 수가 없네요.
printf문을 넣어서 확인을 해보았는데 저 두번째 else if 부분이 아예 작동을 안 하네요.

학교과제중입니다.!
전체 추천리스트 보기
새로운 댓글이 없습니다.
새로운 댓글 확인하기
글쓰기
◀뒤로가기
PC버전
맨위로▲
공지 운영 자료창고 청소년보호