Convert infix to postfix conversion - Computer Programming

Latest

C C++ Java Python Perl Programs Examples with Output -useful for Schools & College Students

Monday, April 4, 2011

Convert infix to postfix conversion


#include<iostream.h>
#include<conio.h>
class inpre
{ char exp[50],stack[50],result[50];
  int n;
  public:
         inpre();
         friend int prior(char c);
         void arrange();
};
inpre::inpre()
{ char temp[50],ch;
  int i=0;
  cout<<"enter infix expression and enter $ after completion "<<endl;
  do
  { cout<<"enter ";
    cin>>ch;
    temp[i]=ch;
    i++;
  }while(ch!='$');
  n=i-1;int j=n-1;i=0;
 
  while(i<n&&j>=0)
  { exp[j]=temp[i];i++;j--;
  }
}
void inpre::arrange()
{ char ch;
  int slast=0,rlast=0;
  for(int i=0;i<n;i++)
  { ch=exp[i];
    if(ch!='('&&ch!=')'&&ch!='^'&&ch!='/'&&ch!='*'&&ch!='+'&&ch!='-')
    { result[rlast]=ch;
      rlast++;
    }
    else
    { if(ch=='('||ch==')')
      { if(ch==')')
        { stack[slast]=ch;
          slast++;
        }
        else
        { slast-=1;
          while(stack[slast]!=')')
          { result[rlast]=stack[slast];
            rlast++;slast--;
          }
          stack[slast]='#';
        }
      }
      else
      { if(stack[slast-1]!='('&&stack[slast-1]!=')')
        { if(prior(ch)<prior(stack[slast-1]))
          { slast=slast-1;
            while(prior(stack[slast])>prior(ch))
            { result[rlast]=stack[slast];
              rlast++;slast--;
            }
            slast+=1;
            stack[slast]=ch;
            slast++;
          }
          else
          { stack[slast]=ch;
            slast++;
          }
        }
        else
        { stack[slast]=ch;
          slast++;
        }
      }
     }
    }
    for(int x=slast-1;x>=0;x--)
    { result[rlast]=stack[x];
      rlast++;
    }
    cout<<endl<<"PREFIX EXPRESSION :"<<endl;
    for(int k=(rlast-1);k>=0;k--)
      cout<<result[k];
}
int prior(char c)
{ int p;
  switch(c)
  { case '^': p=5;
              break;
    case '/': p=4;
              break;
    case '*': p=4;
              break;
    case '+': p=3;
              break;
    case '-': p=3;
              break;
    case ')': p=1;
              break;
    default : p=1;
              break;
  }
  return(p);
}
void main()
{ clrscr();
  inpre in;
  in.arrange();
  getch();
}

No comments:

Post a Comment