C++: Postfix to Infix


by mohammed1
Tags: infix, postfix
mohammed1
mohammed1 is offline
#1
Nov30-07, 04:15 AM
P: 2
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 Code:
// 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 .......
Phys.Org News Partner Science news on Phys.org
SensaBubble: It's a bubble, but not as we know it (w/ video)
The hemihelix: Scientists discover a new shape using rubber bands (w/ video)
Microbes provide insights into evolution of human language

Register to reply

Related Discussions
C++: Postfix to Infix Engineering, Comp Sci, & Technology Homework 1