Sreekar_0125

infix to prefix

Sep 13th, 2022
213
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.44 KB | None | 0 0
  1. #include<stdio.h>
  2. #include<string.h>
  3. #include<ctype.h>
  4. char stack[100];
  5. int top = -1;
  6. void push(char ch) {
  7.     stack[++top]=ch;
  8. }
  9. void pop () {
  10.     top--;
  11. }
  12. int priority(char ch) {
  13.     if(ch=='^') return 3;
  14.     else if(ch=='*' || ch=='/' || ch=='%') return 2;
  15.     else if(ch=='+' || ch=='-') return 1;
  16.     else return -1;
  17. }
  18. int main () {
  19.     char s[100];
  20.     gets(s);
  21.     int l = strlen(s);
  22.     for(int i=0;i<(l/2);i++) {
  23.         char temp = s[i];
  24.         s[i] = s[l-i-1];
  25.         s[l-i-1] = temp;
  26.     }
  27.     puts(s);
  28.     for(int i=0;s[i]!='\0';i++) {
  29.         if(s[i]=='(') {
  30.             s[i]=')';
  31.         }
  32.         else if(s[i]==')') {
  33.             s[i]='(';
  34.         }
  35.     }
  36.     char p[100];
  37.     int j=0;
  38.     for(int i=0;s[i]!='\0';i++) {
  39.         if(isalnum(s[i])) {
  40.             p[j]=s[i];
  41.             j++;
  42.         }
  43.         else if(s[i]=='(') {
  44.             push(s[i]);
  45.         }
  46.         else if(s[i]==')') {
  47.             while(stack[top]!='(') {
  48.                 p[j]=stack[top];
  49.                 pop();
  50.                 j++;
  51.             }
  52.             pop();
  53.         }
  54.         else {
  55.             while(priority(s[i]) <= priority(stack[top])) {
  56.                 p[j]=stack[top];
  57.                 j++;
  58.                 pop();
  59.             }
  60.             push(s[i]);
  61.         }
  62.     }
  63.     for(int i=top;i>=0;i--) {
  64.         p[j]=stack[i];
  65.         j++;
  66.     }
  67.     p[j]='\0';
  68.     strrev(p);
  69.     printf("%s",p);
  70.     return 0;
  71. }
Advertisement
Add Comment
Please, Sign In to add comment