Question

Write a program to convert the following infix to the postfix. (A – B) * C...

Write a program to convert the following infix to the postfix.

(A – B) * C + D / E * (F – G)

Using C++ will have to run on mac

0 0
Add a comment Improve this question Transcribed image text
Answer #1
  

#include<iostream>

#include<stack>

#include<string>

using namespace std;

// Function to convert Infix expression to postfix

string InfixToPostfix(string expression);

// Function to verify whether an operator has higher precedence over other

int HasHigherPrecedence(char operator1, char operator2);

// Function to verify whether a character is operator symbol or not.

bool IsOperator(char C);

// Function to verify whether a character is alphanumeric chanaracter (letter or numeric digit) or not.

bool IsOperand(char C);

int main()

{

string expression;

cout<<"Enter Infix Expression \n";

getline(cin,expression);

string postfix = InfixToPostfix(expression);

cout<<"Output = "<<postfix<<"\n";

}

// Function to evaluate Postfix expression and return output

string InfixToPostfix(string expression)

{

// Declaring a Stack from Standard template library in C++.

stack<char> S;

string postfix = ""; // Initialize postfix as empty string.

for(int i = 0;i< expression.length();i++) {

// Scanning each character from left.

// If character is a delimitter, move on.

if(expression[i] == ' ' || expression[i] == ',') continue;

// If character is operator, pop two elements from stack, perform operation and push the result back.

else if(IsOperator(expression[i]))

{

while(!S.empty() && S.top() != '(' && HasHigherPrecedence(S.top(),expression[i]))

{

postfix+= S.top();

S.pop();

}

S.push(expression[i]);

}

// Else if character is an operand

else if(IsOperand(expression[i]))

{

postfix +=expression[i];

}

else if (expression[i] == '(')

{

S.push(expression[i]);

}

else if(expression[i] == ')')

{

while(!S.empty() && S.top() != '(') {

postfix += S.top();

S.pop();

}

S.pop();

}

}

while(!S.empty()) {

postfix += S.top();

S.pop();

}

return postfix;

}

// Function to verify whether a character is english letter or numeric digit.

// We are assuming in this solution that operand will be a single character

bool IsOperand(char C)

{

if(C >= '0' && C <= '9') return true;

if(C >= 'a' && C <= 'z') return true;

if(C >= 'A' && C <= 'Z') return true;

return false;

}

// Function to verify whether a character is operator symbol or not.

bool IsOperator(char C)

{

if(C == '+' || C == '-' || C == '*' || C == '/' || C== '$')

return true;

return false;

}

// Function to verify whether an operator is right associative or not.

int IsRightAssociative(char op)

{

if(op == '$') return true;

return false;

}

// Function to get weight of an operator. An operator with higher weight will have higher precedence.

int GetOperatorWeight(char op)

{

int weight = -1;

switch(op)

{

case '+':

case '-':

weight = 1;

case '*':

case '/':

weight = 2;

case '$':

weight = 3;

}

return weight;

}

// Function to perform an operation and return output.

int HasHigherPrecedence(char op1, char op2)

{

int op1Weight = GetOperatorWeight(op1);

int op2Weight = GetOperatorWeight(op2);

// If operators have equal precedence, return true if they are left associative.

// return false, if right associative.

// if operator is left-associative, left one should be given priority.

if(op1Weight == op2Weight)

{

if(IsRightAssociative(op1)) return false;

else return true;

}

return op1Weight > op2Weight ? true: false;

}

Add a comment
Know the answer?
Add Answer to:
Write a program to convert the following infix to the postfix. (A – B) * C...
Your Answer:

Post as a guest

Your Name:

What's your source?

Earn Coins

Coins can be redeemed for fabulous gifts.

Not the answer you're looking for? Ask your own homework help question. Our experts will answer your question WITHIN MINUTES for Free.
Similar Homework Help Questions
ADVERTISEMENT
Free Homework Help App
Download From Google Play
Scan Your Homework
to Get Instant Free Answers
Need Online Homework Help?
Ask a Question
Get Answers For Free
Most questions answered within 3 hours.
ADVERTISEMENT
ADVERTISEMENT
ADVERTISEMENT