marcoshuck icon

Inversor de palabras

marcoshuck | PRO | 04/22/14 03:03:07 PM UTC | 0 ⭐ | 548 👁️ | Never ⏰ | []
C |

3.19 KB

|

None

|

0 👍

/

0 👎

/***************************************************************************************************************************
 
CONSIGNA:
    Escriba un programa que escriba una línea de texto y utilice una pila para imprimir por pantalla la línea invertida.
 
***************************************************************************************************************************/
 
// Librería estandar
#include <stdio.h>
#include <stdlib.h>
 
#define MAX_SIZE 128
 
// Estructura nodo
struct nodo_struct
{
    char c; // Letra
    struct nodo_struct *sig; // Nodo siguiente
};
 
// Tipos de datos
typedef struct nodo_struct new_nodo; // new_nodo creará un nuevo nodo tipo struct.
typedef new_nodo * ptr_nodo; // ptr_nodo creará un puntero a un nodo.
 
// Funciones
char strpos_(char str[], unsigned int pos);
char * strcat_(char str[], char c);
 
// Funciones de lista
void push(ptr_nodo *ptrHead, char letra); // Agrega un elemento a la lista.
char pop(ptr_nodo *ptrHead); // Saca un elemento de la lista.
int lista_isNull(ptr_nodo lista); // ¿Está vacía la lista?
 
// Main
int main(int argc, char *argv[])
{
    // Declaramos las variables:
    char str[MAX_SIZE]; // str: string conteniendo el texto original.
    char m_str[MAX_SIZE]; // m_str: string conteniendo el texto invertido (modificado).
    ptr_nodo ptrInicio = NULL; // ptrInicio: puntero al inicio de la lista.
    int i; // i: contador.
 
    // Inicio del programa, se solicita cargar un texto para invertir.
    printf("Ingrese el texto a invertir: ");
    scanf("%128[^\n]s", str);
    
    // Se borra la pantalla para mostrar los resultados.
    system("CLS");
    
    // Cargamos la lista desde la variable str.
    for(i = 0; i < strlen(str); i++)
    {
        push(&ptrInicio, strpos_(str, i));
    }
    
    // Mostramos el texto original.
    printf("--> Su texto: %s\n", str);
    
    // Descargamos la lista en la variable m_str.
    while(!lista_isNull(ptrInicio))
    {
        strcat_(m_str, pop(&ptrInicio));
    }
    
    // Mostramos el texto invertido
    printf("---> Texto invertido:  %s\n", m_str);
    
    system("PAUSE");
    return 0;
}
 
// Funcion strpos_ devuelve el char de str[] en pos.
char strpos_(char str[], unsigned int pos)
{
    return (char)str[pos];
}
 
// Función strcat_ 
char * strcat_(char str[], char c)
{
    int i;
    for(i = 0; str[i] != '\0'; i++);
    str[i++] = c;
    str[i] = '\0';
    return str;
}
 
// Funciones de lista (pila):
    // Funcion push (agregar un elemento a la lista)
void push(ptr_nodo *ptrHead, char letra)
{
    ptr_nodo ptrNuevo;
    ptrNuevo = malloc(sizeof(new_nodo));
    if(ptrNuevo)
    {
        ptrNuevo->c = letra;
        ptrNuevo->sig = *ptrHead;
        *ptrHead = ptrNuevo;
    }
    else
        printf("-> Error al insertar nuevo dato. Memoria insuficiente.\n");
}
    // Funcion pop (quitar un elemento a la lista)
char pop(ptr_nodo *ptrHead)
{
    ptr_nodo ptrTmp;
    char ret;
    ptrTmp = *ptrHead;
    ret = (*ptrHead)->c;
    *ptrHead = (*ptrHead)->sig;
    free(ptrTmp);
    return ret;
}
// ¿Está vacía la lista?
int lista_isNull(ptr_nodo lista)
{
    return lista == NULL;
}

Comments