#include #include #include const int MAX = 50 ; class infix { private : char target[MAX], stack[MAX] ; char *s, *t ; int top, l ; 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, "" ) ; l = 0 ; } void infix :: setexpr ( char *str ) { s = str ; strrev ( s ) ; l = strlen ( s ) ; * ( target + l ) = '\0' ; t = target + ( l - 1 ) ; } void infix :: push ( char c ) { if ( top == MAX - 1 ) cout << "\nPoshte Pore!\n" ; else { top++ ; stack[top] = c ; } } char infix :: pop( ) { if ( top == -1 ) { cout << "Poshte Khalie!\n" ; return -1 ; } else { char item = stack[top] ; top-- ; return item ; } } void infix :: convert( ) { char opr ; 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++ ; } 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 ) { opr = pop( ) ; *t = opr ; t-- ; } t++ ; } 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( ) { while ( *t ) { cout <<""<<*t; t++ ; } } int main( ) { cout<<"\t********************************************* \n"; cout<<"\t******[Mobadele InFix Be PreFix {C++}]****** \n"; cout<<"\t************[www.PnuSoftware.tk]************* \n"; cout<<"\t********************************************* \n"; char expr[MAX] ; infix q ; cout << "\nEbarate 'InFix' Ra vared Namaeed:\n==> " ; cin.getline ( expr, MAX ) ; q.setexpr( expr ) ; q.convert( ) ; cout << "\nEbarate 'Prefix' Mishavad: " ; q.show( ) ; }