Saturday, February 7, 2015

calculate the value of infix expression using 1 stack in C++

#include<iostream>
#include<cstring>
#include<cstdlib>
using namespace std;
class stack
{public:
int top,t,c[3],z,i,j;
char a[50],b;
void push(char c);
char pop();
void check(char d);
};
void stack::push(char c)
{a[++top]=c;
 t=top;
}
char stack::pop()
{c[0]=a[top--]-48;
 c[1]=a[top--];
 c[2]=a[top--]-48;
 if(c[1]=='-')
 z=c[2]-c[0];
 else if(c[1]=='+')
 z=c[2]+c[0];
 else if(c[1]=='*')
 z=c[2]*c[0];
 else
 z=c[2]/c[0];
 b=z+48;
 push(b);
 if(i==j);
 else check(a[i]);
}
void stack::check(char d)
{--t;
 switch(d)
 {case '+':
  case '-':if(t<0)
           push(d);
           else
           pop();
           break;
  case '*':
  case '/':if(a[t]=='*' || a[t]=='/')
           pop();
           else
           push(d);
           break;
  default :push(d);
           break;
 }
}
int main()
{stack s;s.top=-1;s.t=-1;
 int k;
 cout<<"Enter the infix:\n";
 cin.getline(s.a,50);
 s.j=strlen(s.a);
 for(s.i=0;s.i<s.j;s.i++)
 {s.check(s.a[s.i]);
 }
 while(s.top>0)
 {s.pop();
 }
 cout<<"Hence the ans is:";
 k=s.a[0]-48;
 cout<<k;
}

No comments:

Post a Comment

Contributors

Translate