1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 |
/* 4x02-Busqueda_de_palabra_escondida 15/12/2011 Dada una palabra, diremos que está escondida en un texto si está contenida en éste, no necesariamente de forma continua. Por ejemplo, la palabra “elefante” está escondida en la frase “El hermano de Francisco tuvo suerte”. Elabora un programa que lea una palabra de teclado y el nombre de un fichero de texto, y mire a ver si la palabra está escondida en el fichero. Si está nos debe de indicar el menor número de carácter en el que ya está contenida. Si no está nos tiene también que informar de esa incidencia. La palabra a buscar no tendrá más de 50 caracteres, pero desconocemos su longitud. */ #include <stdio.h> #include <strings.h> main() { FILE *fichero; char nombreFichero[255], palABuscar[50], caracter; int comPalABuscar=0; int salir = 0; int i; // Se solicita el fichero: printf( "Introduzca el nombre del fichero que quiere analizar: " ); do { scanf( "%s", nombreFichero ); // Se solicita el nombre del fichero a analizar. fichero = fopen( nombreFichero, "r" ); // Se intenta abrir ese fichero. if( fichero == NULL ) printf( "\n\nEl fichero indicado no pudo abrirse o no existe, pruebe de nuevo: " ); // En caso de no existir o no poderse abrir se muestra un error: } while( fichero == NULL ); // Se resolicita de forma indefinida el nombre del fichero hasta que consiga abrirse. printf( "\n" ); // Se solicita la palabra a buscar: printf( "Introduzca la palabra a buscar: " ); do { scanf( "%s", palABuscar ); if( strlen(palABuscar) > 50 ) printf( "La palabra ha de ser inferior a 50 caracteres, prueve de nuevo: " ); } while( strlen(palABuscar) > 50 ); // Se recoge el primer caracter: fscanf( fichero, "%c", &caracter ); // Mientras al fichero le queden caracteres Y salir valga 0: printf( "\n " ); for( i=0; !feof(fichero) && salir == 0; i++ ) { if( caracter != '\n' ) printf( "%c", caracter ); // Imprimir los caracteres usados. else printf( "%c ", caracter ); if( caracter == palABuscar[comPalABuscar] ) // Si el carácter leído del fichero es igual al apuntado por comPalAbuscar se suma uno. comPalABuscar++; if( strlen(palABuscar) == comPalABuscar ) // Cuando el contador de coincidencias sea igual que la longitud de la palabra se saldrá. salir = 1; fscanf( fichero, "%c", &caracter ); }; if( feof(fichero) && strlen(palABuscar) != comPalABuscar ) // Si se ha terminado el fichero y no se ha encontrado la palabra... printf( "\n\nNo se encontro la palabra.\n\n" ); else printf( "\n\nLa palabra escondida \"%s\" se termino de localizar tras leer %i caracteres.\n\n", palABuscar, i ); }; |