1. Not finding help here? Sign up for a free 30min tutor trial with Chegg Tutors
    Dismiss Notice
Dismiss Notice
Join Physics Forums Today!
The friendliest, high quality science and math community on the planet! Everyone who loves science is here!

C++: Postfix to Infix

  1. Nov 30, 2007 #1
    help me "C++: Postfix to Infix"

    I need the program that solve expression from postfix to infix please help me

    like that : abc+* to (a*(b+c))

    this code to solve from infix to posfix :
    PHP:
    // the program is used to convert a infix expression to a postfix expression

    #include<iostream.h>
    #include<stdio.h>
    #include<conio.h>
    #include<string.h>
    #include<stdlib.h>



    const int size =50;
    char infix[size],postfix[size],stack[size];
    int top=-1;

    int precedence(char ch);   // function to get the precedence of the operator
    char pop();  //function to pop an element from the stack
    char topelement();  // returns the top element of the stack
    void push(char ch);  // pushes an element into the stack



    int main()
    {
         char ele,elem,st[2];
         int prep,pre,popped,j=0,chk=0;
         strcpy(postfix," ");
             
         gets(infix);
         
         for(int i=0;infix[i]!=0;i++)
              {
                      if(infix[i]!='('&&infix[i]!=')'&&infix[i]!='^'&&infix[i]!='*'&&infix[i]!='/'&&infix[i]!='+'&&infix[i]!='-')    
                           postfix[j++]=infix[i];
                      else if(infix[i]=='(')
                          {
                             elem=infix[i];
                             push(elem);
                          }
                      else if(infix[i]==')')
                          {
                             while(popped=pop() != '(')
                                 postfix[j++]=popped;
                          }
                      else
                          {
                             elem=infix[i];
                             pre=precedence(elem);//stores the precedence of operator coming frm infix
                             ele=topelement();
                             prep=precedence(ele);//stores the precedence of operator at the top of the stack
                           
                             if(pre > prep)
                               push(elem);                                        
                               
                             else
                               {
                                    while(prep >= pre)
                                      {
                                         if(ele=='#')
                                           break;
                                         popped=pop();
                                         ele=topelement();
                                         postfix[j++]=popped;
                                         prep=precedence(ele);
                                       }
                                       push(elem);
                                }
                             }
                 }
                 
              while((popped=pop())!='#')
                  postfix[j++]=popped;
              postfix[j]='\0';
             
              cout<<"\n post fix :"<<postfix<<endl;
               
               system("pause");
               return 0;
    }

    int precedence(char ch)
    {
           switch(ch)
              {
                   case '^' : return 5;
                   case '/' : return 4;
                   case '*' : return 4;                                            
                   case '+' : return 3;
                   case '-' : return 3;
                   default  : return 0;
              }
    }

    char pop()                  //function to pop the element from the stack
    {
         char ret;
         if(top!=-1)
           {  ret =stack[top];
              top--;
              return ret;
           }
         else
            return '#';
    }
                             
    char topelement()          // function to return top element from the stack without popping
    {    
          char ch;
          if(top!=-1)
            ch=stack[top];
          else
             ch='#';
           return ch;
    }

    void push(char ch)          // function to push an element in the stack
    {
         if(top!=size-1)
             {
                top++;
                stack[top]= ch;
             }
    }        
                                   
     
    I want reverse this code .
    please help me .......
     
    Last edited: Nov 30, 2007
  2. jcsd
Know someone interested in this topic? Share this thread via Reddit, Google+, Twitter, or Facebook

Can you help with the solution or looking for help too?
Draft saved Draft deleted



Similar Discussions: C++: Postfix to Infix
Loading...