/**************************************************************************** PROGRAMA: lista AUTOR: Kiko FECHA: 12.07.94 FINALIDAD: Crea una lista enlazada con todas las palabras que se encuentran en un fichero de texto. COMENTARIOS: Considera palabras cualquier secuencia de caracteres que no contenga espacios en blanco, tabuladores o fines de linea (\n). La lista contiene las palabras en el mismo orden en que aparecen en el texto. Como salida, el programa genera, recorriendo la lista, todas las palabras del fichero de entrada. HISTORIA: BIBLIOGRAFIA: MODO DE UTILIZACION: Una vez compilado, ejecutar: lista fichero donde fichero es el nombre del fichero de texto con cuyas palabras se crear  la lista enlazada. ****************************************************************************/ #include #include #include #include #define MAXSTR 255 #define CR '\n' #define SPACE ' ' #define TAB '\t' typedef struct nodo { char *palabra; struct nodo *sig; } lista; /*--------------------------------------------------------------------------*/ lista *crear_lista(char *nombre_fichero) { FILE *f; char ch; char palabra[MAXSTR]; int numchar; /* N£mero de caracteres de la palabra */ lista *nodo, *anterior, *primero; if ((f = fopen(nombre_fichero, "r")) == NULL) { printf("Error tratando de abrir el fichero %s\n", nombre_fichero); exit(0); } anterior = NULL; primero = NULL; while ((ch = (char)getc(f)) != EOF) { numchar = 0; while (ch != SPACE && ch != CR && ch != TAB && ch != EOF) { palabra[numchar++] = ch; ch = (char)getc(f); } palabra[numchar] = '\0'; printf("%s\n", palabra); if (numchar != 0) { nodo = (lista *)malloc(sizeof(lista)); nodo->palabra = (char *)malloc(strlen(palabra) + 1); strcpy(nodo->palabra, palabra); nodo->sig = NULL; if (primero == NULL) primero = nodo; else anterior->sig = nodo; anterior = nodo; } } return(primero); } /*--------------------------------------------------------------------------*/ void recorrer_lista(lista *L) { while (L != NULL) { printf("%s\n", L->palabra); L = L->sig; } return; } /*--------------------------------------------------------------------------*/ void main(int argc, char *argv[]) { lista *L; clrscr(); if (argc != 2) { printf("Modo de uso: lista nombre_de_fichero_de_texto\n"); exit(0); } L = crear_lista(argv[1]); recorrer_lista(L); exit(0); } /*--------------------------------------------------------------------------*/