C++ program to convert an Expression from Infix form to Postfix form

Monday, January 31st, 2011
#include <iostream.h>
#include <string.h>
#include <ctype.h>
const int MAX = 50 ;
class infix
{
	private :
		char target[MAX], stack[MAX] ;
		char *s, *t ;
		int top ;
	public :
		infix( ) ;
		void setexpr ( char *str ) ;
		void push ( char c ) ;
		char pop( ) ;
		void convert( ) ;
		int priority ( char c ) ;
		void show( ) ;
} ;
infix :: infix( )
{
	top = -1 ;
	strcpy ( target, "" ) ;
	strcpy ( stack, "" ) ;
	t = target ;
	s = ""  ;
}
void infix :: setexpr ( char *str )
{
	s = str ;
}
void infix :: push ( char c )
{
	if ( top == MAX )
		cout << "\nStack is full\n" ;
	else
	{
		top++ ;
		stack[top] = c ;
	}
}
char infix :: pop( )
{
	if ( top == -1 )
	{
		cout << "\nStack is empty\n" ;
		return -1 ;
	}
	else
	{
		char item = stack[top] ;
		top-- ;
		return item ;
	}
}
void infix :: convert( )
{
	while ( *s )
	{
		if ( *s == ' ' || *s == '\t' )
		{
			s++ ;
			continue ;
		}
		if ( isdigit ( *s ) || isalpha ( *s ) )
		{
			while ( isdigit ( *s ) || isalpha ( *s ) )
			{
				*t = *s ;
				s++ ;
				t++ ;
			}
		}
		if ( *s == '(' )
		{
			push ( *s ) ;
			s++ ;
		}
		char opr ;
		if ( *s == '*' || *s == '+' || *s == '/' || *s == '%' || *s == '-' || *s == '$' )
		{
			if ( top != -1 )
			{
				opr = pop( ) ;
				while ( priority ( opr ) >= priority ( *s ) )
				{
					*t = opr ;
					t++ ;
					opr = pop( ) ;
				}
				push ( opr ) ;
				push ( *s ) ;
			}
			else
				push ( *s ) ;
			s++ ;
		}
		if ( *s == ')' )
		{
			opr = pop( ) ;
			while ( ( opr ) != '(' )
			{
				*t = opr ;
				t++ ;
				opr =  pop( ) ;
			}
			s++ ;
		}
	}
	while ( top != -1 )
	{
		char opr = pop( ) ;
		*t = opr ;
		t++ ;
	}
	*t = '\0' ;
}
int infix :: priority ( char c )
{
	if ( c == '$' )
		return 3 ;
	if ( c == '*' || c == '/' || c == '%' )
		return 2 ;
	else
	{
		if ( c == '+' || c == '-' )
			return 1 ;
		else
			return 0 ;
	}
}
void infix :: show( )
{
	cout << target ;
}
void main( )
{
	char expr[MAX] ;
	infix q ;
 
	cout << "\nEnter an expression in infix form: " ;
	cin.getline ( expr, MAX ) ;
 
	q.setexpr ( expr ) ;
	q.convert( ) ;
 
	cout << "\nThe postfix expression is: " ;
	q.show( ) ;
}

Author Name :
Ranjith

Total : 7 Comments


7 Responses to “C++ program to convert an Expression from Infix form to Postfix form”

  1. bakari kassim mzengaeka says:

    thanks your program is some how complicated! but let me have enough time to look on it. My hope i wi’ll undarstand it.

  2. brn says:

    wow i innerstand tnks dear f

  3. Rd says:

    i got an error saying
    [Build error]Error 1 on line 137.. can you please clarify this for me.. thnx a lot.. :))

    im just a newbie :)

  4. nataraj says:

    Thanks..its working for both characters and numbers…:)

  5. aaa says:

    xcellent work!
    but program code could be reduced!

  6. raj says:

    ( and ) operator’s nt thr … plz upload complete code

  7. nd004 says:

    what about ^ power symbol? it has the highest priority say 4 in this code.

Leave a Reply

Question and Answer
C/C++ Unix & Linux Wordpress
Source codes
C C++ Java

Free email signup

Email: