Pages

Saturday, November 17, 2012

program to convert an expression from infix to postfix.



 Program is:
#include<iostream.h>
#include<conio.h>
#include<string.h>
#include<ctype.h>
const int MAX=50;
class infix
{
private:
char target[MAX],stack[MAX];
char *s,*t;
int top;
public:
infix();
void setexpr(char *str);
void push(char c);
char pop();
void convert();
int priority(char c);
void show();
};
infix::infix()
{
top=-1;
strcpy(target,"");
strcpy(stack,"");
t=target;
s="";
}
void infix:: setexpr(char *str)
{
s=str;
}
void infix::push(char c)
{
if(top==MAX)
cout<<"\n Stack is full\n";
else
{
top++;
stack[top]=c;
}
}


char infix::pop()
{
if(top==-1)
{
cout<<"\n Stack is empty\n";
return-1;
}
else
{
char item=stack[top];
top--;
return item;
}
}
void infix::convert()
{
while(*s)
{
if(*s==' '||*s=='\t')
{
s++;
continue;
}
if(isdigit(*s)||isalpha(*s))
{
while(isdigit(*s)||isalpha(*s))
{
*t=*s;
s++;
t++;
}
}
if(*s=='(')
{
push(*s);
s++;
}
char opr;
if(*s=='*'||*s=='+'||*s=='/'||*s=='%'||*s=='-'||*s=='$')
{
if(top!=-1)
{
opr=pop();
while(priority(opr)>=priority(*s))
{

*t=opr;
t++;
opr=pop();
}
push(opr);
push(*s);
}
else
push(*s);
s++;
}

if(*s==')')
{
opr=pop();
while((opr)!='(')
{
*t=opr;
t++;
opr=pop();
}
s++;
}
}
while(top!=-1)
{
char opr=pop();
*t=opr;
t++;
}
*t='\0';
}
int infix::priority(char c)
{
if(c=='$')
return 3;
if(c=='*'||c=='/'||c=='%')
return 2;
else
{
if(c=='+'||c=='-')
return 1;
else
return 0;
}
}
void infix::show()
{
cout<<target;
}
void main()
{
char expr[MAX];
infix q;
clrscr();
cout<<"\n Enter an expression in infix form:";
cin.getline(expr,MAX);
q.setexpr (expr);
q.convert();
cout<<"\n The postfix expression is:";
q.show();
getch();
}

output is:

No comments:

Post a Comment