/
Inicio :: Foros

 F.A.Q.F.A.Q.                  Conéctese para revisar sus mensajesConéctese para revisar sus mensajes   

comparar palabras de 2 textos y cambiarlas a mayusculas

 
      Índice del Foro elrincondelc.com -> Principiantes C/C++
Ver tema anterior :: Ver siguiente tema  
AutorMensaje
crissepul



Registrado: 10 Abr 2007
Mensajes: 14
Ubicación: la granja

MensajePublicado: 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

MensajePublicado: 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

MensajePublicado: 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

MensajePublicado: 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

MensajePublicado: 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

MensajePublicado: 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

MensajePublicado: 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

MensajePublicado: 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
      Índice del Foro elrincondelc.com -> Principiantes C/C++
Página 1 de 1Todas las horas están en GMT - 8 Horas

 
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas

(c) ElRincondelC.com

Un proyecto de UrlanHeat.com