From Melodic Lemur, 5 Months ago, written in Text.
Embed
  1. int evaluation(char *output, LINKED_STACK stack)
  2. {
  3.         char ch, x, y, z, result, i, j=strlen(output);
  4.        
  5.         for(i=0; i<j; i++)
  6.         {
  7.                 if(isOperator(output[i])==1)
  8.                 {
  9.                         x=*(int*)stack_pop(stack);
  10.                         y=*(int*)stack_pop(stack);
  11.                        
  12.                         switch(output[i])
  13.                         {
  14.                                 case '+': z=x+y;
  15.                                                   stack_push(stack, z);break;
  16.                                                                
  17.                                 case '-': z=x-y;
  18.                                                   stack_push(stack, z);break;
  19.                        
  20.                                 case '*': z=x*y;
  21.                                                   stack_push(stack, z);break;
  22.                        
  23.                                 case '/': if(x!=0 && y!=0)
  24.                                                   {
  25.                                                         z=x/y;
  26.                                                         stack_push(stack, z);break;
  27.                                                   }
  28.                                                  
  29.                                                   else
  30.                                                   break;
  31.                         }
  32.                         stack_push(stack, z);
  33.                 }
  34.                
  35.                 else
  36.                 stack_push(stack, &output[i]);
  37.         }
  38.        
  39.         z=stack_pop(stack);
  40.         return z;
  41. }
  42.  
  43. void main()
  44. {
  45.         LINKED_STACK s=stack_init;
  46.        
  47.         char *c="1+2*(3*4-5)-(6+7*8)+9";
  48.         infixToPosfix(evaluation(s, c), s);
  49.        
  50.         return 0;
  51. }