Academic Integrity: tutoring, explanations, and feedback — we don’t complete graded work or submit on a student’s behalf.

Trying to make a program to convert infix to postfix in c++. I am stuck here try

ID: 3798263 • Letter: T

Question

 Trying to make a program to convert infix to postfix in c++. I am stuck here trying to get a result of infix to postfix to print.  Could anyone help me print my result of postfix and maybe leave comments so I can understand better? Thank you.  #include  #include  #include  #include   using namespace std;  class Expression{     public:         string inToPost();         string convertThis; // Expression that we want converted          Expression(string input, int direction);   //constructor         bool isOperator(char character);         bool isOperand(char character);         int isHigherWeight(char character);         bool isHigherPrecedence(char op1, char op2);         string printResult();      private:         string infix;         string postfix;         string prefix;   };                                        //Constructor function Expression::Expression(string input, int direction){     switch (direction){         case 1: infix = input;         case 2: postfix = input;         case 3: prefix = input;      } }                                      //Operator Function checks to see if character is a legal symbol bool Expression::isOperator(char character){     if((character == '*')||(character == '+')||(character == '-')||(character == '/'))                             return true;                             else                             return false;         }                                       //Operand Function checks to see if character is a legal character bool Expression::isOperand(char character){     if(character >= 'a' && character <= 'z')         return true;         if(character >= 'A' && character <= 'Z')     return true;     if(character >= '0' && character <= '9')     return true;     else         return false; }                                  //Function determines the weight of Operator. int Expression::isHigherWeight(char character){         int weight = 0;   // or -1?         switch(character){         case '+':         case '-':                 weight = 1;         case '*':         case '/':                 weight = 2;         }         return weight; }                                 //Function that compares weights of two different Operators. bool Expression::isHigherPrecedence(char oper1, char oper2){         int op1Weight = isHigherWeight(oper1);         int op2Weight = isHigherWeight(oper2);          // If operators have equal precedence, return true         // return false     return op1Weight > op2Weight ?  true: false;{      } }  string Expression::inToPost(){      stack Stack;         string postfix = "";  // Initialize postfix as empty string.          for(int i = 0;i< convertThis.length();i++){   //go through array of string convertThis              if (convertThis[i] == '('){            //1-Read the left parenthesis and push it onto the stack                 Stack.push(convertThis[i]);                 }               else if(isOperand(convertThis[i])){    //2-else if( the next input is a number or letter)                  cout << convertThis[i];           //3-Read the operand and write it to the output                 }                else if(isOperator(convertThis[i])){   //4-else if the next input is operator                    cout << Stack.top();                    Stack.pop();                    //5-Print the top operation and pop it             }                                     //6-                         while(!Stack.empty() && Stack.top() != '(' && isHigherPrecedence(Stack.top(),convertThis[i])){                                 Stack.push(convertThis[i]);     //7- Read the next input symbol, and push this symbol onto the stack             }                           // 8- Read and discard the next input symbol(which should be a right parenthesis).                 if (convertThis[i] == ')'){                     i+1;                                             //  9- Print the top operation and pop it; Keep printing and popping until                 while (!Stack.top() == '('){                    cout << Stack.top();                    Stack.pop();                 }         }                 Stack.pop();                 //10- Finally, pop the left parenthesis.                  while(!Stack.empty()){                  cout << Stack.top();                  }           return postfix;     }    }     string Expression::printResult(){        return postfix;     }   int main(){  string convertThis;   int choice;   cout << "|-----Here is my conversion menu-----|" << endl; cout << "|----What are you converting to?-----|" << endl << endl; cout << "1- Infix to postfix" << endl; cout << "2- Infix to prefix" << endl; cout << "3- postfix to infix?" << endl; cout << "4- prefix to infix?" << endl; //cin >> choice; //cin.ignore();  cout << "Now enter the expression you want to convert "; getline(cin,convertThis);  //Expression printResult;  //cout << printResult.printResult();   }   

Explanation / Answer

#include<iostream>
#include<cstring>
#include<stack>


using namespace std;

class Expression{
public:
void inToPost();

Expression(string const &input); //constructor
bool isOperator(char character);
bool isOperand(char character);
int getWeight(char character);
bool isHigherPrecedence(char op1, char op2);
char* printResult();

private:
char* infix;
char* postfix;
char* prefix;
string convertThis; // Expression that we want converted


};
//Constructor function
Expression::Expression(string const &input) : convertThis(input){
  
}

//Operator Function checks to see if character is a legal symbol
bool Expression::isOperator(char character){
if((character == '*')||(character == '+')||(character == '-')||(character == '/')){
return true;
} else {
return false;
}
}

//Operand Function checks to see if character is a legal character
bool Expression::isOperand(char character){
if(character >= 'a' && character <= 'z')
return true;
if(character >= 'A' && character <= 'Z')
return true;
if(character >= '0' && character <= '9')
return true;
else
return false;
}

//Function determines the weight of Operator.
int Expression::getWeight(char character){
int weight = 0; // or -1?
switch(character){
case '+':
case '-':
weight = 1;
break; // for case +,- weight is 1
case '*':
case '/':
weight = 2;
break; // for case *,/ weight is 2
default : weight = 0;
// for any other the weight is 0
}
return weight;
}

//Function that compares weights of two different Operators.
bool Expression::isHigherPrecedence(char oper1, char oper2){
int op1Weight = getWeight(oper1);
int op2Weight = getWeight(oper2);

// If operators have equal precedence, return true
// return false
return (op1Weight > op2Weight ? true: false);{

}
}

void Expression::inToPost(){

stack<char> Stack;
int size = convertThis.length();
postfix[size]; // Initialize postfix as empty string.
int index = 0;
int weight = 0;

for(int i = 0; i < size ;i++){ //go through array of string convertThis

if (convertThis[i] == '('){ //1-Read the left parenthesis and push it onto the stack
Stack.push(convertThis[i]);
continue;
}
  
if (convertThis[i] == ')'){
  
while (!Stack.empty() && Stack.top() != '(') {
postfix[index] = Stack.top();
Stack.pop();
index++;
}
// pop off the opening parenthesis also
if (!Stack.empty()) {
Stack.pop();
}
  
continue;
}
/* else if(isOperand(convertThis[i])){ //2-else if( the next input is a number or letter)
postfix[index]=convertThis[i];
index++;

}
*/ //dont really require this , as we are only interested in operators and parenthesis, rest can be treated as operands

weight = getWeight(convertThis[i]);
if (weight == 0) {
// it is an operand
// simply append it to postfix expression
postfix[index]=convertThis[i];
index++;

}
else {
// it is an operator
if (Stack.empty()) {
// simply push the operator onto stack if
// stack is empty
Stack.push(convertThis[i]);
}
else {
// pop of all the operators from the stack and
// append it to the postfix expression till we
// see an operator with a lower precedence that
// the current operator
while (!Stack.empty() && Stack.top() != '(' &&
weight <= getWeight(Stack.top())) {
postfix[index] = Stack.top();
Stack.pop();
index++;

}
// push the current operator onto stack
Stack.push(convertThis[i]);
}
}
  
}
// pop of the remaining operators present in the stack
// and append it to postfix expression
while (!Stack.empty()) {
postfix[index] = Stack.top();
Stack.pop();
index++;
}
postfix[index] = ''; // null terminate the postfix expression
}


char* Expression::printResult(){
return postfix;
}


int main(){

string convertThis;
int choice;

cout << "|-----Here is my conversion menu-----|" << endl;
cout << "|----What are you converting to?-----|" << endl << endl;
cout << "1- Infix to postfix" << endl;
cout << "2- Infix to prefix" << endl;
cout << "3- postfix to infix?" << endl;
cout << "4- prefix to infix?" << endl;
cin >> choice;
cin.ignore();

cout << "Now enter the expression you want to convert ";
getline(cin,convertThis);

Expression expression (convertThis); // Create new object of expression class
if(choice == 1){
expression.inToPost();
}//
char* result = expression.printResult();
cout<<endl<<"result : "<<result;

return 0;


}

if you are using switch case , use break statements otherwise the matched cased and all the below cases will be executed too. Also i think you need to brush up your concepts on clases as you did not really make objects to use the class methods and variables.

Hire Me For All Your Tutoring Needs
Integrity-first tutoring: clear explanations, guidance, and feedback.
Drop an Email at
drjack9650@gmail.com
Chat Now And Get Quote