Programación General > C/C++

 Infijo a postfijo

(1/1)

Checho360:
Hola, estoy haciendo un programa que me convierta una expresion infijo a postfijo. El programa funcionar funciona, pero añade caracteres extraños al final de la cadena a veces o imprime un intro o cosas asi.


--- Código: C ---//############################################################################## //Encabezados necesarios para el programa: #include <stdio.h> #include <stdlib.h> #include <E:\C\encabezados\estructuras.h> //############################################################################## //Este programa recibe una expresion "infijo" y la devuelve en formato//"postfijo" //############################################################################## //#############################PROTOTIPOS####################################### int tam_infijo (char * array); char * scan_infijo (); int esOperador (char c); int esParentesis (char c); int precedencia (char operador1, char operador2); void inFijo2postFijo (char inFijo[], char postFijo[]); //############################################################################## //##############################FUNCIONES####################################### int tam_infijo (char * array){        int cont = 0;        while ( *( array + cont ) != '\0' ){                    cont++;              }        return cont - 1;    } char * scan_infijo (){        char * expresion;        expresion = (char*) calloc (200, sizeof (char));        scanf("%s", expresion);        getchar();        expresion = (char*) realloc (expresion, sizeof(char) *         ( tam_infijo (expresion) + 1) );    } int esOperador (char c){        return c == '+' || c == '-' || c == '*' || c == '/';    } int esParentesis (char c){        if ( c == '(' ){                  return 1;        }        else if ( c == ')' ){                  return -1;             }        else return 0;    } int precedencia (char operador1, char operador2){        if ( ( operador1 == '*' || operador1 == '/' ) && ( operador2 == '+'        || operador2 == '-' ) ) return 1; //Precedencia del operador 1 mayor        else if ( ( operador1 == '+' || operador1 == '-' ) && ( operador2 == '*'        || operador2 == '/' ) ) return 0; //Precedencia del operador 1 menor        else return -1; //Precedencia del operador 1 igual que la del operador 2 } void inFijo2postFijo (char inFijo[], char postFijo[]){          ptrNuevaPila pila = NULL;          int i = 0, j = 0;          empujar_pila ( &pila, '(' );          inFijo = (char*)          realloc (inFijo, ( ( ( tam_infijo (inFijo) ) + 2 ) * sizeof (char) ) );          inFijo [tam_infijo (inFijo)] = ')';          inFijo [tam_infijo (inFijo) + 1] = '\0';          while ( pila != NULL ){                      if ( esOperador ( inFijo [i] ) ){                                while ( ( esOperador ( pila->dato ) ) && (                                precedencia (inFijo [i], pila->dato ) == 0 ||                                precedencia (inFijo [i], pila->dato ) == -1 ) ) {                                                        postFijo [j] = pila->dato;                                                        j++;                                                        sacar_pila( &pila );                                            }                                empujar_pila ( &pila, inFijo [i] );                           }                      else if ( esParentesis ( inFijo [i] ) ){                                if ( esParentesis ( inFijo [i] ) == 1 ){                                          empujar_pila ( &pila, inFijo [i] );                                     }                                else{                                          while ( pila->dato != '(' && esOperador ( pila->dato ) ){                                                      postFijo [j] = pila->dato;                                                      j++;                                                      sacar_pila ( &pila );                                                }                                          sacar_pila ( &pila );                                     }                           }                      else{                 postFijo [j] = inFijo [i];                                j++;                           }                      i++;                }          postFijo [j] == '\0';     } //############################################################################## //##############################MAIN############################################ int main (){        char * infijo = scan_infijo ();        char postFijo [tam_infijo(infijo)+1];        inFijo2postFijo(infijo, postFijo);        printf ("%s", postFijo);        getchar();        return 0;    } //############################################################################## 
Enlace de estructuras.h :

http://www.megaupload.com/?d=N31B614Z

Un saludo!!

Checho360:
Ya está resuelto, no hace falta que nadie responda

Navegación

[0] Índice de Mensajes

Ir a la versión completa