C++ || Stack Based Infix To Postfix Conversion (Single Digit)

Print Friendly, PDF & Email

This page consists of another homework assignment which was presented in a C++ Data Structures course. No matter which institution you attend, it seems every instructor assigns a program similar to this at one time or another.

Want to evaluate a postfix expression? Click here.

Want to convert & evaluate multi digit, decimal, and negative numbers? Click here!

REQUIRED KNOWLEDGE FOR THIS PROGRAM

What Is Infix?
What Is Postfix?
Stack Data Structure
Cin.getline
How To Convert To Postfix
The Order Of Operations
#include "ClassStackType.h"

The program demonstrated on this page has the ability to convert a normal infix equation to postfix equation, so for example, if the user enters the infix equation of (1*2)+3, the program will display the postfix result of 12*3+.

Before we get into things, here is a helpful algorithm for converting from infix to postfix in pseudo code:

======= INFIX TO POSTFIX CONVERSION =======

This program uses a custom template.h class. To obtain the code for that class, click here.

QUICK NOTES:
The highlighted lines are sections of interest to look out for.

Want to convert & evaluate multi digit, decimal, and negative numbers? Click here!

The code is heavily commented, so no further insight is necessary. If you have any questions, feel free to leave a comment below.

Want to evaluate a postfix expression? Click here for sample code.

Once compiled, you should get this as your output
(Note: the code was compile three separate times to display different output)

====== RUN 1 ======

==== Infix to Postfix Conversion ====

Math Operators:
+ || Addition
- || Subtraction
* || Multiplication
/ || Division
% || Modulus
^ || Power
$ || Square Root

Sample Infix Equation: (((4^5)*14)/($(23+2)-2))*(1%2)/(2*4)

Please enter an infix expression: ((a+b)+c)/(d^e)
The Infix expression = ((a+b)+c)/(d^e)
The Postfix expression = ab+c+de^/

====== RUN 2 ======

==== Infix to Postfix Conversion ====

Math Operators:
+ || Addition
- || Subtraction
* || Multiplication
/ || Division
% || Modulus
^ || Power
$ || Square Root

Sample Infix Equation: (((4^5)*14)/($(23+2)-2))*(1%2)/(2*4)

Please enter an infix expression: (3*5)+(7^6)
The Infix expression = (3*5)+(7^6)
The Postfix expression = 35*76^+

====== RUN 3 ======

==== Infix to Postfix Conversion ====

Math Operators:
+ || Addition
- || Subtraction
* || Multiplication
/ || Division
% || Modulus
^ || Power
$ || Square Root

Sample Infix Equation: (((4^5)*14)/($(23+2)-2))*(1%2)/(2*4)

Please enter an infix expression: (((4^5)*14)/($(23+2)-2))*(1%2)/(2*4)
The Infix expression = (((4^5)*14)/($(23+2)-2))*(1%2)/(2*4)
The Postfix expression = 45^14*232+$2-/12%24*/*

Was this article helpful?
👍 YesNo

4 Responses to C++ || Stack Based Infix To Postfix Conversion (Single Digit)

  1. Avatar Cody says:

    The infix B/A-C exposes a flaw in your program. For many other expressions it is correct though.

    At lines 90 and 91 you would have ‘/’ be the only item in the stack, and ‘-‘ be the next operand to compare the Operation Order with. token becomes ‘/’ and you pop it from the stack, but this makes the stack empty.

    • admin admin says:

      Hello

      This program was implemented in such a way to mimic that of a simple calculator in that it requires you (the user) to enter in the correct parenthesis into the program to render the correct postfix conversions.

      For example,

      Entering the infix expression “B/A-C” renders the postfix conversion of BAC-/
      Whereas entering the infix expression “(B/A)-C” renders the postfix conversion of BA/C-

      Implementing this in such a way is not a flaw, but is the way this program was intended to operate.

      Hope this helps

  2. Avatar Bogdan says:

    Hello, at while(infix[infixCounter] != ”) (line 67) and postfix[postfixCounter] = ”; (line 157) compiler gives me an error: empty character constant. what should i do?

    • admin admin says:

      Hi, thanks for visiting!

      It appears there was a formatting issue in the code, it has since been updated.

      Thanks for catching that

Leave a Reply