Infix to Postfix || C++
#include<bits/stdc++.h>
using namespace std;

bool isOperator(char c){
    if(c=='+'||c=='-'||c=='*'||c=='/'||c=='^'){
        return true;
    }
    else{
        return false;
    }
}

int precedence(char c){
    if(c=='^')return 3;
    else if(c=='*' ||c=='/')return 2;
    else if(c=='+' || c=='-')return 1;
    else return -1; 
}

string infixToPostfix(stack<char>s,string infix){

    string postfix="";
    int l=postfix.length();

    for(int i=0;i<l;i++){
        if( ( infix[i]>='a' && infix[i]<='z' ) ||
         ( infix[i]>='A' && infix[i]<='Z' ) ){
            postfix+=infix[i];
        }

        else if(infix[i]=='('){
            s.push(infix[i]);
        }

        else if(infix[i]==')'){
            while( (!s.empty()) && (s.top()!='(' )   ){
                char temp=s.top();
                postfix+=temp;
                s.pop();
                
            }
            if(s.top()=='('){
                s.pop();
            }
        }
        else if( isOperator(infix[i]) ){
            if(s.empty()){
                s.push(infix[i]);
            }
            else{
                if( precedence(infix[i])>precedence(s.top()) ){
                    s.push(infix[i]);
                }
                else if( (precedence(infix[i])==precedence(s.top())) ){
                    s.push(infix[i]);
                }
                else{
                    while( (!s.empty()) && ( precedence(infix[i])<=precedence(s.top()) ) ){
                        char t=s.top();
                        postfix+=t;
                        s.pop();
                    }
                    s.push(infix[i]);
                    
                }
            }
        }


    }

    while(!s.empty()){
        postfix+=s.top();
        s.pop();
    }

    return postfix;
}


int main(){
    string infix_exp,postfix_exp;
    cout<<"Enter a infix express: "<<endl;
    cin>>infix_exp;

    stack<char>s;

    cout<<"Infix express: "<< infix_exp<<endl;
    postfix_exp=infixToPostfix(s,infix_exp);

     cout<<"Postfix express is : "<< postfix_exp<<endl;

    return 0;
}
Comments (2)