#include <iostream>
#include <stdlib.h>
#include <stack>
#include <string.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <unistd.h>
//#include <strstream.h>
using namespace std;
bool isOperator(char ch)
{
if (ch=='+' || ch=='-' || ch=='*' || ch=='/')
return true;
else
return false;
}
int performOperation(int op1, int op2, char op)
{
int ans;
switch(op){
case '+':
ans = op2 + op1;
break;
case '-':
ans = op2 - op1;
break;
case '*':
ans = op2 * op1;
break;
case '/':
ans = op2 / op1;
break;
}
return ans;
}
int main()
{
char exp[1000]="", buffer[15]="";
int i=0,op1=0, op2=0, len=0, j=0, x=0, elemntCnt=0;
stack<int> s;
gets(exp);
cout <<"Enter a Postfix Expression: ( e.g. 23 34 * )" << endl;
len = strlen(exp);
cout << "length of expression:"<<len<<endl;
j = 0;
if (len > 0)
{
for(i=0; i<len;i++)
{
if(exp[i]>='0' && exp[i]<='9')
{
buffer[j++] = exp[i];
}
else if(exp[i]==' ')
{
if(j>0)
{
buffer[j] = '\0';
x = atoi(buffer);
s.push(x);
memset(buffer, '\0', sizeof(buffer));
j = 0;
elemntCnt++;
}
}
else if(isOperator(exp[i]))
{
if (elemntCnt<2)
{
cout <<"invalid format" << endl;
break;
}
else
{
op1 = s.top();
s.pop();
op2 = s.top();
s.pop();
cout << "Performing operation "<<op1<<exp[i]<<op2<<endl;
s.push(performOperation(op1, op2, exp[i]));
cout <<"Answer for above is ::" << s.top() << endl;
}
}
else
{
cout <<"invalid characters in expression" << endl;
break;
}
}//end for
}
else
{
cout <<"Exiting" << endl;
}
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c3RkbGliLmg+CiNpbmNsdWRlIDxzdGFjaz4KI2luY2x1ZGUgPHN0cmluZy5oPgojaW5jbHVkZSA8c3lzL3N0YXQuaD4KI2luY2x1ZGUgPHN5cy90eXBlcy5oPgojaW5jbHVkZSA8dW5pc3RkLmg+Ci8vI2luY2x1ZGUgPHN0cnN0cmVhbS5oPgoKCnVzaW5nIG5hbWVzcGFjZSBzdGQ7Cgpib29sIGlzT3BlcmF0b3IoY2hhciBjaCkKewogICAgaWYgKGNoPT0nKycgfHwgY2g9PSctJyB8fCBjaD09JyonIHx8IGNoPT0nLycpCiAgICAgICAgcmV0dXJuIHRydWU7CiAgICBlbHNlCiAgICAgICAgcmV0dXJuIGZhbHNlOwp9CgoKaW50IHBlcmZvcm1PcGVyYXRpb24oaW50IG9wMSwgaW50IG9wMiwgY2hhciBvcCkKewogICAgaW50IGFuczsKICAgIHN3aXRjaChvcCl7CiAgICBjYXNlICcrJzoKICAgICAgICBhbnMgPSBvcDIgKyBvcDE7CiAgICAgICAgYnJlYWs7CiAgICBjYXNlICctJzoKICAgICAgICBhbnMgPSBvcDIgLSBvcDE7CiAgICAgICAgYnJlYWs7CiAgICBjYXNlICcqJzoKICAgICAgICBhbnMgPSBvcDIgKiBvcDE7CiAgICAgICAgYnJlYWs7CiAgICBjYXNlICcvJzoKICAgICAgICBhbnMgPSBvcDIgLyBvcDE7CiAgICAgICAgYnJlYWs7CiAgICB9CiAgICByZXR1cm4gYW5zOwp9CgoKaW50IG1haW4oKQp7CiAgICBjaGFyIGV4cFsxMDAwXT0iIiwgYnVmZmVyWzE1XT0iIjsKICAgIGludCBpPTAsb3AxPTAsIG9wMj0wLCBsZW49MCwgaj0wLCB4PTAsIGVsZW1udENudD0wOwogICAgc3RhY2s8aW50PiBzOwogICAgZ2V0cyhleHApOwogICAgY291dCA8PCJFbnRlciBhIFBvc3RmaXggRXhwcmVzc2lvbjogKCBlLmcuIDIzIDM0ICogKSIgPDwgZW5kbDsKICAKICAgIGxlbiA9IHN0cmxlbihleHApOwogICAgY291dCA8PCAibGVuZ3RoIG9mIGV4cHJlc3Npb246Ijw8bGVuPDxlbmRsOwogICAgaiA9IDA7CgogICAgaWYgKGxlbiA+IDApCiAgICB7CgkgICAgZm9yKGk9MDsgaTxsZW47aSsrKQoJICAgIHsKCQlpZihleHBbaV0+PScwJyAmJiBleHBbaV08PSc5JykKCQl7CgkJICAgIGJ1ZmZlcltqKytdID0gZXhwW2ldOwoJCX0KCQllbHNlIGlmKGV4cFtpXT09JyAnKQoJCXsKCQkgICAgaWYoaj4wKQoJCSAgICB7CgkJCWJ1ZmZlcltqXSA9ICdcMCc7CgkJCXggPSBhdG9pKGJ1ZmZlcik7CgkJCXMucHVzaCh4KTsKCQkJbWVtc2V0KGJ1ZmZlciwgJ1wwJywgc2l6ZW9mKGJ1ZmZlcikpOwoJCQlqID0gMDsKCQkJZWxlbW50Q250Kys7CgkJICAgIH0KCQl9CgkJZWxzZSBpZihpc09wZXJhdG9yKGV4cFtpXSkpCgkJewoJCSAgICBpZiAoZWxlbW50Q250PDIpCgkJICAgIHsKCQkgICAgICAgY291dCA8PCJpbnZhbGlkIGZvcm1hdCIgPDwgZW5kbDsKCQkgICAgICAgYnJlYWs7CgkJICAgIH0KCQkgICAgZWxzZQoJCSAgICB7CgkJCSAgICBvcDEgPSBzLnRvcCgpOwoJCQkgICAgcy5wb3AoKTsKCQkJICAgIG9wMiA9IHMudG9wKCk7CgkJCSAgICBzLnBvcCgpOwoJCQkgICAgY291dCA8PCAiUGVyZm9ybWluZyBvcGVyYXRpb24gIjw8b3AxPDxleHBbaV08PG9wMjw8ZW5kbDsKCQkJICAgIHMucHVzaChwZXJmb3JtT3BlcmF0aW9uKG9wMSwgb3AyLCBleHBbaV0pKTsKCQkgICAgCSAgICBjb3V0IDw8IkFuc3dlciBmb3IgYWJvdmUgaXMgOjoiIDw8IHMudG9wKCkgPDwgZW5kbDsKCgkJICAgIH0KCQl9CgkJZWxzZQoJCXsKCQkgICAgY291dCA8PCJpbnZhbGlkIGNoYXJhY3RlcnMgaW4gZXhwcmVzc2lvbiIgPDwgZW5kbDsKCQkgICAgYnJlYWs7CgkJfQoJICAgIH0vL2VuZCBmb3IKICAgIH0KICAgIGVsc2UKICAgIHsKICAgICAgICAgIGNvdXQgPDwiRXhpdGluZyIgPDwgZW5kbDsKICAgIH0KICAgIHJldHVybiAwOwp9