Code: cpp
#include<iostream.h>
#include<ctype.h>
#define SS 100
#define TRUE 1
#define FALSE 0
struct stack
{
int items[SS],top;
};
struct stack s;
int empty(struct stack *ps)
{
   if(ps->top==SS-1)
     return TRUE;
   else
   return FALSE;
}
int popandtest(struct stack *ps,int *px,int *pund)
{
  if(empty(ps))
   {
     *pund=TRUE;
     return 1;
   }
   *pund=FALSE;
   *px=ps->items[ps->top];
   return(*px);
}
void pushandtest(struct stack *ps,int x,int *pover)
{
 if(!empty(ps))
  {
   *pover=TRUE;
   return;
  }
 *pover=FALSE;
 ps->items[++(ps->top)]=x;
 return;
}

int evalue(struct stack *ps,char post[SS])
{
  int i=0,op1,op2,r,v,underflow,overflow;
  for(;post[i]!='\0';i++)
  {
    if(!isalpha(post[i]))
     {
      op2=popandtest(&s,&s.items[s.top],&underflow);
      op1=popandtest(&s,&s.items[s.top],&underflow);
      switch(post[i])
      {
       case '+':r=op1+op2;
        pushandtest(&s,r,&overflow);
        break;
       case '-':r=op1-op2;
        pushandtest(&s,r,&overflow);
        break;
      }

     }
  }
  v=popandtest(&s,&s.items[s.top],&underflow);
  return(v);
}
main()
{
 char p[SS];
 int i,r;
 cout<<"Enter a valid postfix expression";
 cin>>p;
 for(i=0;p[i]!='\0';i++)
 {
  if(isalpha(p[i]))
   {
    cout<<"enter value for"<<p[i]<<endl;
    cin>>s.items[i];
    s.top++;
   }
 }
 r=evalue(&s,p);
 cout<<"value="<<r;
return 0;
}