| Ver tema anterior :: Ver siguiente tema |
| Autor | Mensaje |
|---|
crissepul
Registrado: 10 Abr 2007 Mensajes: 14 Ubicación: la granja
| Publicado: 10/09/2007 2:23 pm | | | Título: comparar palabras de 2 textos y cambiarlas a mayusculas |
| hola tengo el siguiente problema necesito hacer en c lo siguiente cuando el usuario apriete la opcion procesar haga el siguiente ejemplo que creo q lo explica mejor q mis palabras....no se preocupen por las librerias y el menu solo de esta funcion
ejemplo para que se entienda:
si el usuario escribe lo siguiente:
hoy dia fui a jugar futbol con mis amigos del colegio
cuando apriete enter debe devolverme en el archivo salida.txt:
hoy DIA fui a JUGAR FUTBOL con mis AMIGOS del colegio
las palabras que transformo a mayusculas son xq se encontraban en el archivo dictionary.txt
como pueden ver tengo un archivo dictionary.txt con muschas palabras cuando el usuario ingrese un texto y apriete enter debe devolverme lo mismo que escribio con los cambios a mayusculas en salida.txt
bueno espero que me ayuden camiando mi codigo o creando uno nuevo.....hice algunos comentarios en mi codigo xq me faltaban algunas palabras q no conosco cuales son como por ejemplo la q se usa para transformar a mayusculas creo q es toupper pero no estoy seguro de antemano muchas gracias
| Código: | #include <stdio.h> #include <string.h> #include <stdlib.h>
procesar( char palabra[]) { FILE *diccionario; FILE *salida; char pal_archivo[100];
diccionario = fopen ("dictionary.txt","rt"); salida = fopen ("salida.txt","w+); while (!EOF(diccionario)) { fscanf (diccionario,"%s\n",&pal_archivo); if (strcmp(pal_archivo,palabra)==0) { /** transformar mayuscula**/ /** grabar palabra en archivo de salida**/ /** fprintf (salida,"%s\n",palabra);**/ } }
} |
|
|
| Volver arriba | |
 |
spesmod
Registrado: 23 Ago 2007 Mensajes: 33
| Publicado: 11/09/2007 6:32 am | | | Título: |
| pero wey en esta linea tu estas escribiendo sobre el archivo diccionario.txt
| Cita: | | fscanf (diccionario,"%s\n",&pal_archivo); |
si es asi esta mal que escriba sobre la "plantilla" de la cual deteminaras que palabra la pasas a mayuscula o no. Mira en lenguaje natural deberia ser algo asi:
| Código: | 1. debes tener un archivo diccionario.txt ya hecho en algun direcctorio, x ej "C\pruebas\diccionario.txt", en ese archivo tu puedes escribir cualquier palabra separada por un espacio, es algo sencillisimo lo puedes con el bloc de notas.
2. debes correr el programa, y escribir lo que se te de la gana, toto eso guardalo en un archivo auxiliar digamos tal ves "C:\pruebas\miauxiliar.txt".
3. inmediatamente debes empezar a obtener cada palabra guardada en "miauxiliar.txt", para eso lees cada letra y la vas metiendo en un array de char por ejm "palabra1[]" hasta que encuentres un espacio en blanco " ", luego haces lo mismo con cada palabra del diccionario, y lo metes en un array digamos "palabra2[]" hasta que encuentres un espacio en blanco en el archivo "diccionario.txt"
4. hasta aqui tenemos dos array "palabra1[]" que es la primera palabra de "miauxiliar.txt" y "palabra2[]" que es la primera palabra del diccionario,haces un for y las comparas, si el resultado es cero, buscas la siguiente palabra del archivo "diccionario.txt" y la guardas en "palabra2[]", y sigues asi buscando y comparadando hasta que el resultado de la comparacion sea verdadero o hasta que se termine el archivo "diccionario.txt".
5. si la comparacion es postiva (son iguales) haces toupper a "palabra1[]"
6. al finalizar el bucle de busqueda (bien por que son iguales o por que EOF(diccionario)==1) colocas cada palabra en el archivo final "C:\pruebas\salida .txt", de esta forma tendras el archivo modificado si alguna palabra se repite el "diccioanrio.txt"
|
si ese es el proceso que deseas dimelo y te lo escribo en C, pero ya tienes el psudocodigo, asume el reto y si no puedes nos avisas y te hechamos a mano (te damos el codigo). _________________ |--A--Q--U--A--|
|
|
| Volver arriba | |
 |
rir3760

Registrado: 01 Oct 2004 Mensajes: 3657 Ubicación: Mexico
| Publicado: 11/09/2007 8:52 am | | | Título: |
| | spesmod escribió: | pero wey en esta linea tu estas escribiendo sobre el archivo diccionario.txt
| Código: | fscanf (diccionario,"%s\n",&pal_archivo); |
|
Esa linea es correcta: scanf y similares son funciones de lectura de datos.
A grandes razgos los pasos a realizar en el programa son:
1) Por eficiencia lee todos los datos del directorio de palabras y almacenalos en un array, tambien debes ordenar ese array ya sea mediante una funcion propia o utilizando qsort (parte de la biblioteca estandar de C).
2) Obten la entrada del usuario y procesa esta palabra por palabra: busca esta en el array de palabras (el diccionario en memoria), si se encuentra la imprimes en mayusculas y en caso contrario la imprimes tal cual.
Algunas funciones que pueden ser de utilidad:
* strcmp para la comparacion de cadenas. * strtok para separar una linea de texto en palabras. * toupper para convertir un caracter a mayusculas.
Un saludo _________________ The capacity to learn is a gift; The ability to learn is a skill; The willingness to learn is a choice. -- Rebec of Ginaz |
|
| Volver arriba | |
 |
|
crissepul
Registrado: 10 Abr 2007 Mensajes: 14 Ubicación: la granja
| Publicado: 11/09/2007 12:44 pm | | | Título: quiero el codigo por favor |
| | bueno eso es exactamente lo q quiero......ayer estuve intentando hacer el codigo pero como soy principiante tuve algunos problemas ...me puedas dar el codigo correcto por favor |
|
| Volver arriba | |
 |
rir3760

Registrado: 01 Oct 2004 Mensajes: 3657 Ubicación: Mexico
| Publicado: 11/09/2007 1:15 pm | | | Título: Re: quiero el codigo por favor |
| | crissepul escribió: | | me puedas dar el codigo correcto por favor |
No porque el objetivo del foro "Principiantes C/C++" es resolver dudas y problemas concretos.
Si solo te interesa el codigo fuente de ese programa intenta en el foro Trabajo de clase.
Un saludo _________________ The capacity to learn is a gift; The ability to learn is a skill; The willingness to learn is a choice. -- Rebec of Ginaz |
|
| Volver arriba | |
 |
crissepul
Registrado: 10 Abr 2007 Mensajes: 14 Ubicación: la granja
| Publicado: 11/09/2007 5:21 pm | | | Título: |
| | Pero ya hice todos los intentos...ademas me lo ofrecieron no encuentro nada malo....es solo una funcion no una tarea completa ni mucho nada...de verdad necesito ese codigo |
|
| Volver arriba | |
 |
|
DCelso

Registrado: 28 Abr 2004 Mensajes: 112
| Publicado: 13/09/2007 4:55 pm | | | Título: |
| Basándome en el código anterior del otro ejemplo que preguntaste he hecho esta modificación para realizar lo que comentas. Saludos.
| Código: | #include <stdio.h> #include <string.h> #include <stdlib.h> #include <ctype.h>
#define largo_n 25
#define largo_total 103 // máximo 4 palabras de largo_n mas tres espacios
typedef struct s_palabra { char caracteres[largo_n]; struct s_palabra *sig; } palabra;
void ingresar_palabra_en_diccionario( char caracteres[largo_n]); int cargar_diccionario(); void elmininar_memoria_diccionario(); int procesar_frase(); int esta_palabra_en_diccionario( char caracteres[largo_n] ); //char to_upper(char c); palabra * diccionario=NULL;
int main(int argc , char* argv[]) { cargar_diccionario(); int opcion; printf("\nMENU PRINCIPAL"); do { printf("\n\n .1 Introducir frase"); printf("\n .2 Salir"); printf("\n\nInserte su opcion: "); fscanf(stdin,"%d", &opcion); fflush(stdin); switch(opcion) { case 1: procesar_frase(); break; } if (opcion == 2) printf("\nUsted ha salido del sistema\n\n"); if (opcion < 1 || opcion > 2 ) { printf ("\nOpcion incorrecta... vuelva a intentarlo"); } } while(opcion != 2); elmininar_memoria_diccionario(); return 0; } //char to_upper(char c) //{ // if (islower(c)) // return (c + ('A' - 'a')); // else // return (c); //}
int procesar_frase() { int retorno=1; FILE *f_; char frase[largo_total]; char palabra[largo_n]; int i; f_ = fopen("salida.txt","wt"); if(f_==NULL) { printf("error en el archivo"); retorno =0; } else { printf("Escriba la frase que desea procesar: " ); fgets(frase,largo_total,stdin); fflush(stdin); char * pch; pch = strtok (frase," "); while (pch != NULL) { strcpy(palabra,pch); if (esta_palabra_en_diccionario(palabra)) { for (i=0;i<strlen(palabra);i++) { palabra[i]=toupper(palabra[i]); } } fprintf (f_,"%s ",palabra); pch = strtok (NULL," \0"); } fclose(f_); } return retorno; }
int cargar_diccionario() { int retorno = 1; FILE *f_; char caracteres[largo_n];
f_ = fopen("dictionary.txt","rt"); if(f_==NULL) { printf("error en el archivo"); retorno =0; } else { while (!feof(f_)) { fscanf(f_,"%s\n",&caracteres[0]); ingresar_palabra_en_diccionario(caracteres); } fclose(f_); } return retorno; }
void ingresar_palabra_en_diccionario( char caracteres[largo_n] ) { palabra * ultima_palabra=diccionario; palabra * nueva= (palabra *)malloc(sizeof(palabra)); strcpy(nueva->caracteres,caracteres); nueva->sig=NULL; if (ultima_palabra !=NULL) { while (ultima_palabra->sig!=NULL) { ultima_palabra=ultima_palabra->sig; } ultima_palabra->sig=nueva; } else { diccionario=nueva; } }
int esta_palabra_en_diccionario( char caracteres[largo_n] ) { int encontrado=0; palabra *puntero_palabras=diccionario; if (puntero_palabras !=NULL) { do { if (strcmp(puntero_palabras->caracteres,caracteres)==0) { encontrado=1; } puntero_palabras=puntero_palabras->sig; } while (puntero_palabras!=NULL && encontrado==0); } return encontrado; }
void elmininar_memoria_diccionario() { palabra * puntero_palabras=diccionario; palabra * palabra_para_borrar; if (puntero_palabras !=NULL) { do { palabra_para_borrar=puntero_palabras; puntero_palabras=puntero_palabras->sig; free (palabra_para_borrar); } while (puntero_palabras!=NULL); } }
|
|
|
| Volver arriba | |
 |
rir3760

Registrado: 01 Oct 2004 Mensajes: 3657 Ubicación: Mexico
| Publicado: 14/09/2007 6:11 am | | | Título: |
| | DCelso escribió: | | Basándome en el código anterior del otro ejemplo que preguntaste he hecho esta modificación para realizar lo que comentas. |
En buen plan no deberias hacerlo: el no aprendera nada si le das en bandeja el codigo fuente que el deberia esforzarse en realizar. ¿Acaso no es ese el proposito de sus tareas?
Un saludo _________________ The capacity to learn is a gift; The ability to learn is a skill; The willingness to learn is a choice. -- Rebec of Ginaz |
|
| Volver arriba | |
 |
|
|