Advertisement
Riposati

INFIXA para POSFIXA

Nov 4th, 2017
115
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.59 KB | None | 0 0
  1. #include<stdio.h>
  2. #include<string.h>
  3. #define size 305
  4.  
  5. char stack[size];
  6. int tos=0,ele;
  7. void push(int ele);
  8. char pop();
  9. void show();
  10. int isempty();
  11. int isfull();
  12. char infix[305],output[305];
  13. int prec(char);
  14.  
  15. int main()
  16. {
  17.         int t;
  18.         scanf("%d",&t);
  19.  
  20.         while(t--){
  21.  
  22.             int i=0,j=0,k=0,length;
  23.             char temp;
  24.             scanf("%s",infix);
  25.             length=strlen(infix);
  26.  
  27.             for(i=0;i<length;i++)
  28.             {
  29.                 if(infix[i]!='+' && infix[i]!='-' && infix[i]!='*' && infix[i]!='/' && infix[i]!='^' && infix[i]!=')' && infix[i]!='(' )
  30.                 {
  31.                     output[j++]=infix[i];
  32.                 }
  33.  
  34.                 else
  35.                 {
  36.                     if(tos==0)
  37.                     {
  38.                         push(infix[i]);
  39.                     }
  40.                     else
  41.                     {
  42.                         if(infix[i]!=')' && infix[i]!='(')
  43.                         {
  44.                             if(    prec(infix[i]) <= prec(stack[tos-1])  )
  45.                             {
  46.                                 temp=pop();
  47.                                 output[j++]=temp;
  48.                                 push(infix[i]);
  49.                             }
  50.                             else
  51.                             {
  52.                                 push(infix[i]);
  53.                             }
  54.                         }
  55.                         else
  56.                         {
  57.                             if(infix[i]=='(')
  58.                             {
  59.                                 push(infix[i]);
  60.                             }
  61.                             if(infix[i]==')')
  62.                             {
  63.                                 temp=pop();
  64.                                 while(temp!='(')
  65.                                 {
  66.                                     output[j++]=temp;
  67.                                     temp=pop();
  68.                                 }
  69.                             }
  70.                         }
  71.                     }
  72.                 }
  73.             }
  74.             while(tos!=0)
  75.             {
  76.                 output[j++]=pop();
  77.             }
  78.         printf("%s\n",output);
  79.         strcpy(output,"");
  80.         }
  81. }
  82.  
  83. void push(int ele)
  84. {
  85.     stack[tos]=ele;
  86.     tos++;
  87. }
  88. char pop()
  89. {
  90.     tos--;
  91.     return(stack[tos]);
  92. }
  93. int prec(char symbol)
  94. {
  95.     if(symbol== '(')
  96.         return 0;
  97.     if(symbol== ')')
  98.         return 0;
  99.     if(symbol=='+' || symbol=='-')
  100.         return 1;
  101.     if(symbol=='*' || symbol=='/')
  102.         return 2;
  103.     if(symbol=='^')
  104.         return 3;
  105.     return 0;
  106. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement