C - 문자열을 이용한 후위표기 -> 전위표기로 바꾸는 방법

|
              

직접만든거긔


아직 C 초보임 ㅎㅎ 부들부들


학교 과제임


#include <stdio.h>

#include <stdlib.h>

#include <string.h>


#define MAX_STACK_SIZE 100


typedef struct {

char e[MAX_STACK_SIZE];

}Equation;


typedef Equation element;


typedef struct {

element stack[MAX_STACK_SIZE];

int top;

} StackType;


void init(StackType *s)

{

s->top = -1;

}


int is_empty(StackType *s)

{

return (s->top == -1);

}


int is_full(StackType *s)

{

return (s->top == (MAX_STACK_SIZE-1));

}


void push(StackType *s, element item)

   if( is_full(s) ) { 

fprintf(stderr,"스택 포화 에러\n");

return;  

 } 

 else s->stack[++(s->top)] = item; 

}


element pop(StackType *s) 

    if( is_empty(s) ) {

fprintf(stderr, "스택 공백 에러\n");

exit(1);

}

else return s->stack[(s->top)--]; 


element peek(StackType *s) 

    if( is_empty(s) ) {

fprintf(stderr, "스택 공백 에러\n");

exit(1);

}

else return s->stack[s->top]; 

}


int prec(char op)

{

switch(op){

case '(': case ')': return 0;

case '+': case '-': return 1;

case '*': case '/': return 2;

}

return -1;

}


char* c2s(char* s, char c){

 s[0]=c;

 s[1]=NULL;

 return s;

}


void postfix_to_infix(char exp[])

{

int i;

int len=strlen(exp);

char ch,str[2],arr[MAX_STACK_SIZE]={0},arr2[MAX_STACK_SIZE]={0};

element temp;

StackType s;


init(&s);


for(i=0;i<len;i++)

{

ch=exp[i];

if(ch!='+' && ch!='-' && ch!='*' && ch!='/')

{

strcpy(temp.e,c2s(str,ch));

push(&s,temp);

}

else

{

temp=pop(&s);

strcpy(arr,temp.e); 


if(!is_empty(&s))

{

strcpy(arr2,"(");

temp=pop(&s);

strcat(arr2,temp.e);

}


strcpy(temp.e,c2s(str,ch));


strcat(arr2,temp.e);


strcat(arr2,arr);


strcat(arr2,")");


strcpy(temp.e,arr2);

push(&s,temp);


strcpy(arr2,"");

strcpy(arr,"");

}

}

printf("%s\n",&s);

}


int main(void)

{

postfix_to_infix("12+7*");

return 0;

}

'갯힝의 일상' 카테고리의 다른 글

파오캐 오라 분석  (1) 2014.06.26
m16 버전오류  (0) 2014.06.20
나랜디 2.7 심심해서 만든버전  (10) 2013.08.17
밤에 할일  (7) 2013.08.13
ㅠ.. 저 내일 생일임다.  (21) 2013.06.12