Program in c++ to evaluate postfix expression.
Program:
#include<iostream.h>
#include<conio.h>
#include<stdlib.h>
#include<math.h>
#include<ctype.h>
const int
MAX=50;
class
postfix
{
private:
int stack[MAX];
int top,nn;
char*s;
public:
postfix();
void setexpr(char*str);
void push(int item);
int pop();
void calculate();
void show();
};
postfix::postfix()
{
top=-1;
}
void
postfix::setexpr(char*str)
{
s=str;
}
void
postfix::push(int item)
{
if(top==MAX-1)
cout<<endl<<"Stack is
full";
else
{
top++;
stack[top]=item;
}
}
int
postfix::pop()
{
if(top==-1)
{
cout<<endl<<"Stack is
empty";
return NULL;
}
int data=stack[top];
top--;
return data;
}
void
postfix::calculate()
{
int n1,n2,n3;
while(*s)
{
if(*s==' '||*s=='\t')
{
s++;
continue;
}
if(isdigit(*s))
{
nn=*s-'0';
push(nn);
}
else
{
n1=pop();
n2=pop();
switch(*s)
{
case '+':
n3=n2+n1;
break;
case '-':
n3=n2-n1;
break;
case '/':
n3=n2/n1;
break;
case '*':
n3=n2*n1;
break;
case '%':
n3=n2%n1;
break;
case '$':
n3=pow(n2,n1);
break;
default:
cout<<"Unknowm operator";
exit(1);
}
push(n3);
}
s++;
}
}
void
postfix::show()
{
nn=pop();
cout<<"Result is:"<<nn;
}
void main()
{
clrscr();
char expr[MAX];
cout<<"\n Enter postfix expression
to be evaluted:";
cin.getline(expr,MAX);
postfix q;
q.setexpr(expr);
q.calculate();
q.show();
getch();
}
Output:
Enter postfix expression to be evaluted: 3 6 9
* +
Result is:57