By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
424,837 Members | 1,195 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 424,837 IT Pros & Developers. It's quick & easy.

Infix to postfix conversion

P: 1
Hi guys,

I'm a newbie here, I just want to seek for help regarding my program. I want to implement an infix to postfix conversion only accepting numbers. Right now, I already debugged the errors and encountering loop everytime I execute it.

Here's my sample code:

************************************************** ******************
Expand|Select|Wrap|Line Numbers
  1. #include<stdio.h>
  2. #include<conio.h>
  3. #include<ctype.h>
  4.  
  5.  
  6. struct stack_elem
  7. {
  8.  char elem[10];
  9.  int topelem;
  10. } stckmain;
  11.  
  12. void intoposconvert(char *infix, char *postfix, struct stack_elem *st)
  13. {
  14.  char *inf, *pos;
  15.  struct stack_elem *s;
  16.  char temp;
  17.  int tctr;
  18.  inf = &infix[0];
  19.  pos = &postfix[0];
  20.  s = st;
  21.  
  22. while(*inf){
  23.  if ( *inf == '(' )
  24.   {
  25.    tctr=++s->topelem; /* increment the topelem */
  26.    s->elem[tctr]=*inf; /*push*/
  27.    temp=s->elem[tctr]; /*assign value pushed in stack in temp*/
  28.    inf++;
  29.   }
  30.  else if ( *inf == ')' )
  31.   {
  32.    while ( temp != '(' )
  33.     {
  34.      tctr=s->topelem; /*assign top in tmp*/
  35.      temp=s->elem[tctr]; /*assign value to be popped in temp*/
  36.      --s->topelem; /*pop*/
  37.      *pos=temp;
  38.      pos++;
  39.      inf++;
  40.     }
  41.   }
  42.  else if (*inf == '*' || *inf == '/') /*data coming from ICP*/
  43.   {
  44.    if( s->topelem == -1 || s->elem[tctr] == '(' ) /*if stack is empty or entity in stack is '('*/
  45.     {
  46.      tctr=++s->topelem;
  47.      s->elem[tctr]=*inf;
  48.      temp=s->elem[tctr];
  49.      inf++;
  50.     }
  51.    else /*else stack is not empty*/
  52.     {
  53.      temp=s->elem[tctr];
  54.       if(temp == '+' || temp == '-')
  55.        {
  56.         tctr=++s->topelem;
  57.     s->elem[tctr]=*inf;
  58.     inf++;
  59.        }
  60.       else if (temp == '^')
  61.        {
  62.         tctr=s->topelem;
  63.     temp=s->elem[tctr];
  64.         --s->topelem;
  65.         *pos=temp;
  66.     pos++;
  67.     inf++;
  68.        }
  69.       else if (temp == '*' || temp == '/')
  70.       {
  71.        tctr=s->topelem;
  72.        temp=s->elem[tctr];
  73.        --s->topelem;
  74.        *pos=temp;
  75.        pos++;
  76.        inf++;
  77.        tctr=++s->topelem;
  78.        s->elem[tctr]=*inf;
  79.       }
  80.      }
  81.    }
  82.  else if (*inf == '+' || *inf == '-')
  83.   {
  84.    if( s->topelem == -1 || s->elem[tctr] == '(' ) /*if stack is empty or entity in stack is '('*/
  85.     {
  86.       tctr=++s->topelem;
  87.       s->elem[tctr]=*inf;
  88.       temp=s->elem[tctr];
  89.       inf++;
  90.     }
  91.    else
  92.     {
  93.       temp=s->elem[tctr];
  94.        if(temp == '*' || temp == '/' || temp == '^')
  95.         {
  96.           tctr=s->topelem;
  97.       temp=s->elem[tctr];
  98.           --s->topelem;
  99.       *pos=temp;
  100.       pos++;
  101.       inf++;
  102.         }
  103.        else if(temp == '+' || temp == '-')
  104.        {
  105.      tctr=s->topelem;
  106.      temp=s->elem[tctr];
  107.      --s->topelem;
  108.      *pos=temp;
  109.      pos++;
  110.      inf++;
  111.      tctr=++s->topelem;
  112.      s->elem[tctr]=*inf;
  113.        }
  114.      }
  115.    }
  116.  else if( isdigit(*inf) != 0)
  117.   {
  118.      temp=*inf;
  119.      *pos=temp;
  120.      pos++;
  121.      inf++;
  122.   }
  123.  else
  124.    printf("\n Not a valid input.");
  125.  }
  126. }
  127.  
  128. main()
  129. {
  130.  
  131. char infix[50], postfix[50];
  132. struct stack_elem *st;
  133.  
  134. clrscr();
  135. st = &stckmain;
  136. strcpy(stckmain.topelem, -1);
  137. strcpy(stckmain.elem[0], "");
  138.  
  139. printf("Enter infix statement: ");
  140. /*scanf("%d",&infix[0]);*/
  141. fflush(stdin);
  142. gets(infix);
  143. intoposconvert(&infix[0], &postfix[0], st);
  144. printf("\n Result in postfix statement: ");
  145. printf("%s", postfix);
  146. getch();
  147.  
  148. }
  149.  
************************************************** *********************

Thanks!
-AR
Oct 29 '09 #1
Share this Question
Share on Google+
2 Replies


100+
P: 687
I already debugged the errors and encountering loop everytime I execute it.
How can you execute it if it doesn't even compile? ( no, i'm not talking about conio.h includes that are not everywhere, I'm talking about strcpy)
Oct 29 '09 #2

100+
P: 687
if you change that line to
stckmain.topelem = -1;
it runs, but inserts open parenthesis where it shouldn't be.
Oct 29 '09 #3

Post your reply

Sign in to post your reply or Sign up for a free account.