SabirSazzad

Postfix to Evaluation (any digit)

Feb 26th, 2017
98
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.90 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <iostream>
  3. #include <stack>
  4. using namespace std;
  5.  
  6. int main()
  7. {
  8.     char postfix[100] = {'\0'};
  9.     int Digit1[20], Digit2[20];
  10.     int i=0,j=0,k=0,var1=0,var2=0,result=0,Count1=0,Count2=0,p=1,x=0,Count3=0;
  11.     cout << "Input Postfix Expression: ";
  12.     gets(postfix);
  13.     cout << "Input expression is..." <<endl;
  14.     puts(postfix);
  15.     stack <int> myStack;
  16.     for(i=0;postfix[i] != '\0'; i++)
  17.     {
  18.         if(postfix[i]==',')
  19.         {
  20.             Count3++;
  21.         }
  22.     }
  23.     for(i=0; postfix[i]!='\0'; i++)
  24.     {
  25.         if (postfix[i] != '+' && postfix[i] != '-' && postfix[i] != '*' && postfix[i] != '/')
  26.         {
  27.             if(postfix[i] != ',')
  28.             {
  29.                 myStack.push(postfix[i]-'0');
  30.             }
  31.             else
  32.             {
  33.                 myStack.push(postfix[i]);
  34.             }
  35.  
  36.         }
  37.         else
  38.         {
  39.             if(myStack.top()==',')
  40.             {
  41.                myStack.pop();
  42.             }
  43.             var1 =0;
  44.             Count1=0;
  45.             if(myStack.top()>9)
  46.             {
  47.                 var1= myStack.top();
  48.                 myStack.pop();
  49.                 x=1;
  50.             }
  51.             else
  52.             {
  53.                 for(j=0; myStack.top() != ','; j++)
  54.                 {
  55.                     Digit1[j] = myStack.top();
  56.                     myStack.pop();
  57.                     Count1++;
  58.                 }
  59.                 p=1;
  60.                 for(j=0; j<Count1; j++)
  61.                 {
  62.                     var1 =  var1 +(Digit1[j] * p);
  63.                     p = p*10;
  64.                 }
  65.             }
  66.  
  67.             if(myStack.top()==',')
  68.             {
  69.                myStack.pop();
  70.             }
  71.             var2=0;
  72.             Count2=0;
  73.             if(Count3>2)
  74.             {
  75.                 if(x==1)
  76.                 {
  77.                     for(k=0; !myStack.empty(); k++)
  78.                     {
  79.                         Digit2[k] = myStack.top();
  80.                         if(!myStack.empty())
  81.                         {
  82.                             myStack.pop();
  83.                         }
  84.                         Count2++;
  85.                     }
  86.                 }
  87.                 else
  88.                 {
  89.                     for(k=0; myStack.top() != ',' && !myStack.empty(); k++)
  90.                     {
  91.                         Digit2[k] = myStack.top();
  92.                         if(!myStack.empty())
  93.                         {
  94.                             myStack.pop();
  95.                         }
  96.                         Count2++;
  97.                     }
  98.                 }
  99.             }
  100.             else
  101.             {
  102.                 for(k=0; !myStack.empty(); k++)
  103.                 {
  104.                     Digit2[k] = myStack.top();
  105.                     if(!myStack.empty())
  106.                     {
  107.                         myStack.pop();
  108.                     }
  109.                     Count2++;
  110.                 }
  111.             }
  112.             p=1;
  113.             for(k=0; k<Count2; k++)
  114.             {
  115.                 var2 =  var2 +(Digit2[k] * p);
  116.                 p = p*10;
  117.  
  118.             }
  119.  
  120.             if(postfix[i] == '+')
  121.             {
  122.                 result = var1 + var2;
  123.                 myStack.push(result);
  124.                 result = 0;
  125.             }
  126.             else if(postfix[i] == '-')
  127.             {
  128.                 result = var2 - var1;
  129.                 myStack.push(result);
  130.                 result = 0;
  131.             }
  132.             else if(postfix[i] == '*')
  133.             {
  134.                 result = var1 * var2;
  135.                 myStack.push(result);
  136.                 result = 0;
  137.             }
  138.             else if(postfix[i] == '/')
  139.             {
  140.                 result = var2 / var1;
  141.                 myStack.push(result);
  142.                 result = 0;
  143.             }
  144.  
  145.         }
  146.  
  147.     }
  148.     result = myStack.top();
  149.     cout << "\n" << "Result is: " << result << endl;
  150.  
  151.     return 0;
  152. }
Advertisement
Add Comment
Please, Sign In to add comment