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

#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( ) ;
}

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

  1. bakari kassim mzengaeka

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

    Reply
  2. 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 :)

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

    Reply
  4. Ap ko comment k sath isko explain b krna chahye tha.. is my isdigit or isalpha kya hai???

    Reply

Leave a Reply