marcoshuck

Inversor de palabras

Apr 22nd, 2014
592
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.19 KB | None | 0 0
  1. /***************************************************************************************************************************
  2.  
  3. CONSIGNA:
  4.     Escriba un programa que escriba una línea de texto y utilice una pila para imprimir por pantalla la línea invertida.
  5.  
  6. ***************************************************************************************************************************/
  7.  
  8. // Librería estandar
  9. #include <stdio.h>
  10. #include <stdlib.h>
  11.  
  12. #define MAX_SIZE 128
  13.  
  14. // Estructura nodo
  15. struct nodo_struct
  16. {
  17.     char c; // Letra
  18.     struct nodo_struct *sig; // Nodo siguiente
  19. };
  20.  
  21. // Tipos de datos
  22. typedef struct nodo_struct new_nodo; // new_nodo creará un nuevo nodo tipo struct.
  23. typedef new_nodo * ptr_nodo; // ptr_nodo creará un puntero a un nodo.
  24.  
  25. // Funciones
  26. char strpos_(char str[], unsigned int pos);
  27. char * strcat_(char str[], char c);
  28.  
  29. // Funciones de lista
  30. void push(ptr_nodo *ptrHead, char letra); // Agrega un elemento a la lista.
  31. char pop(ptr_nodo *ptrHead); // Saca un elemento de la lista.
  32. int lista_isNull(ptr_nodo lista); // ¿Está vacía la lista?
  33.  
  34. // Main
  35. int main(int argc, char *argv[])
  36. {
  37.     // Declaramos las variables:
  38.     char str[MAX_SIZE]; // str: string conteniendo el texto original.
  39.     char m_str[MAX_SIZE]; // m_str: string conteniendo el texto invertido (modificado).
  40.     ptr_nodo ptrInicio = NULL; // ptrInicio: puntero al inicio de la lista.
  41.     int i; // i: contador.
  42.  
  43.     // Inicio del programa, se solicita cargar un texto para invertir.
  44.     printf("Ingrese el texto a invertir: ");
  45.     scanf("%128[^\n]s", str);
  46.    
  47.     // Se borra la pantalla para mostrar los resultados.
  48.     system("CLS");
  49.    
  50.     // Cargamos la lista desde la variable str.
  51.     for(i = 0; i < strlen(str); i++)
  52.     {
  53.         push(&ptrInicio, strpos_(str, i));
  54.     }
  55.    
  56.     // Mostramos el texto original.
  57.     printf("--> Su texto: %s\n", str);
  58.    
  59.     // Descargamos la lista en la variable m_str.
  60.     while(!lista_isNull(ptrInicio))
  61.     {
  62.         strcat_(m_str, pop(&ptrInicio));
  63.     }
  64.    
  65.     // Mostramos el texto invertido
  66.     printf("---> Texto invertido:  %s\n", m_str);
  67.    
  68.     system("PAUSE");
  69.     return 0;
  70. }
  71.  
  72. // Funcion strpos_ devuelve el char de str[] en pos.
  73. char strpos_(char str[], unsigned int pos)
  74. {
  75.     return (char)str[pos];
  76. }
  77.  
  78. // Función strcat_
  79. char * strcat_(char str[], char c)
  80. {
  81.     int i;
  82.     for(i = 0; str[i] != '\0'; i++);
  83.     str[i++] = c;
  84.     str[i] = '\0';
  85.     return str;
  86. }
  87.  
  88. // Funciones de lista (pila):
  89.     // Funcion push (agregar un elemento a la lista)
  90. void push(ptr_nodo *ptrHead, char letra)
  91. {
  92.     ptr_nodo ptrNuevo;
  93.     ptrNuevo = malloc(sizeof(new_nodo));
  94.     if(ptrNuevo)
  95.     {
  96.         ptrNuevo->c = letra;
  97.         ptrNuevo->sig = *ptrHead;
  98.         *ptrHead = ptrNuevo;
  99.     }
  100.     else
  101.         printf("-> Error al insertar nuevo dato. Memoria insuficiente.\n");
  102. }
  103.     // Funcion pop (quitar un elemento a la lista)
  104. char pop(ptr_nodo *ptrHead)
  105. {
  106.     ptr_nodo ptrTmp;
  107.     char ret;
  108.     ptrTmp = *ptrHead;
  109.     ret = (*ptrHead)->c;
  110.     *ptrHead = (*ptrHead)->sig;
  111.     free(ptrTmp);
  112.     return ret;
  113. }
  114. // ¿Está vacía la lista?
  115. int lista_isNull(ptr_nodo lista)
  116. {
  117.     return lista == NULL;
  118. }
Advertisement
Add Comment
Please, Sign In to add comment