Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Riki_89D en 7 Agosto 2010, 18:10 pm



Título: Buscar palabra dentro de un archivo
Publicado por: Riki_89D en 7 Agosto 2010, 18:10 pm
Hola que tal?¿

miren intento buscar una palabra dentro de un archivo leido previamente con ReadFile,una vez guardado ene l Buffer,con un bucle FOR leo byte a byte asta que encuentro la palabra primera de lo que quiero buscar pero despues nose como hacer para leer los demas bytes...:S osea tengo algo asin:
Código
  1. char Buffer[1000]; /*archivo leido*/
  2. char Palabra[5] = "Mundo";
  3.  
  4. for(int i = 0; i < SizeFile; i++)
  5. {
  6. if(Buffer[i] == Palabra[0]) /*Cuando encuentre la M*/
  7. /*I AKI NSE K HACER :s*/
  8.  
  9. }
  10. }
  11.  

imaghino que deberia ir guardando byte a byte en otro buffer o nse no se me ocurre nada :S:S



saludos



Título: Re: Buscar palabra dentro de un archivo
Publicado por: MIG80 en 7 Agosto 2010, 21:10 pm
Citar
Código
  1. if(Buffer[i] == Palabra[0]) /*Cuando encuentre la M*/
  2. /*I AKI NSE K HACER :s*/
  3.  

Pues yo creo que si sabes ;)... comparas las letras que faltan

Saludos


Título: Re: Buscar palabra dentro de un archivo
Publicado por: Riki_89D en 7 Agosto 2010, 21:31 pm
Hola gracias por responder,eso ya lo se que hay que comparar pero yo me refiero a comoseria la sintaxis,


con mas if?¿

es  que el objetivo de esto es que el usuario ponga una palbra de X letras i despues claro i despues comparar tantas lñetras tenga la palabra a buscar,para comparar strcmp() no me sirve no?¿



Título: Re: Buscar palabra dentro de un archivo
Publicado por: MIG80 en 7 Agosto 2010, 21:40 pm
Estuviste cerca, cerca.. las siguientes comparaciones puedes hacerlas con algun bucle pero tambien podrias usar la funcion strncmp() :P

Saludos


Título: Re: Buscar palabra dentro de un archivo
Publicado por: Riki_89D en 7 Agosto 2010, 21:44 pm
mm hacer otro bucle for con una variable de tipo int que contenga cuantas letras tenga la palabra i conese segundo bucle pues recorrer i comparar,no?¿




Título: Re: Buscar palabra dentro de un archivo
Publicado por: MIG80 en 7 Agosto 2010, 21:49 pm
mm hacer otro bucle for con una variable de tipo int que contenga cuantas letras tenga la palabra i conese segundo bucle pues recorrer i comparar,no?¿

si claro, con eso yo creo que funciona intentalo asi.

Saludos.


Título: Re: Buscar palabra dentro de un archivo
Publicado por: leogtz en 7 Agosto 2010, 22:01 pm
Código:
http://www.cplusplus.com/reference/clibrary/cstring/strstr/


Título: Re: Buscar palabra dentro de un archivo
Publicado por: Riki_89D en 8 Agosto 2010, 17:31 pm
bueno tengo esto:
Código
  1. int inc = 0;
  2. char Resultado[10];
  3. for(int i = 0; i < 255; i++)
  4. {
  5. if(Frase[i] == Palabra[inc])
  6. {
  7. for(int b = 0; b < sizeof(Palabra); b++)
  8. {
  9. Resultado[b] = Frase[i];
  10. }
  11. }
  12. }
  13.  

Pero nada en Resultado alfinal keda la misma letra todo el rato:S sera por k en el segundo bucle la I no se incrementa i por eso se repite la misma letra pero probe con esto:

Resultado = Frase[ì++];

pero nada :(


Título: Re: Buscar palabra dentro de un archivo
Publicado por: bizco en 8 Agosto 2010, 19:54 pm
si lo quieres buscar asi, un puntero apunta a la cadena a buscar (puntero1), otro apunta al caracter N del buffer (puntero2).

si el caracter al que apunta puntero1 es igual que el que apunta puntero2 incrementas ambos, si antes de llegar al tope uno no es igual al otro (la palabra es distinta) puntero1 tiene que apuntar ora vez a la palabra a buscar.




Título: Re: Buscar palabra dentro de un archivo
Publicado por: MIG80 en 8 Agosto 2010, 21:39 pm
bueno tengo esto:
Código
  1. int inc = 0;
  2. char Resultado[10];
  3. for(int i = 0; i < 255; i++)
  4. {
  5. if(Frase[i] == Palabra[inc])
  6. {
  7. for(int b = 0; b < sizeof(Palabra); b++)
  8. {
  9. Resultado[b] = Frase[i];
  10. }
  11. }
  12. }
  13.  

Pero nada en Resultado alfinal keda la misma letra todo el rato:S sera por k en el segundo bucle la I no se incrementa i por eso se repite la misma letra pero probe con esto:

Resultado = Frase[ì++];

pero nada :(


mmm me parece que de veras no sabes que hacer...
creo que la siguiente función hace lo que buscas (y sino al menos te guiará un poco :P)

Código
  1. int buscarpalabra(const char *Palabra,const char *Frase)
  2. /* Busca el string 'Palabra' en el string 'Frase'. Retorna 1 si lo encuentra, 0 en caso contrario */
  3. {
  4.  const int lon_frase=strlen(Frase),lon_palabra=strlen(Palabra); // 'const int' porque su contenido no variara
  5.  int encontrado=0;
  6.  
  7.  for(int i=0;i<lon_frase && !encontrado;i++)
  8.  {
  9.    if(Frase[i]==Palabra[0])
  10.    {
  11.      encontrado=1;
  12.      for(int b=1;b<lon_palabra && encontrado;b++)
  13.      {
  14.        if(Frase[i+b]!=Palabra[b])
  15.          encontrado=0;
  16.      }
  17.    }
  18.  }
  19.  
  20.  return encontrado;
  21. }
  22.  

Saludos


Título: Re: Buscar palabra dentro de un archivo
Publicado por: Riki_89D en 11 Agosto 2010, 21:28 pm
Bueno finalmente consegui crear una funcion que dice si una palabra se encuentra en un texto no no,como mucha gente aqui me a ayudado mucho pondre la funcion,cabe decir que aun tiene algun fallito pero funciona muy bien :)


Funcion:
Código
  1. bool FindWord(char Frase[255],char Palabra[20])
  2. {
  3. const int MAX_L = 20;
  4. int inc = 0;
  5. char Palabra1[MAX_L];
  6. char Frase1[255];
  7. char Resultado[MAX_L];
  8. bool yesno = false;
  9.  
  10. strcpy(Frase1,Frase);
  11. strcpy(Palabra1,Palabra);
  12.  
  13.  
  14.  
  15. for(int i = 0; i < sizeof(Frase1); i++)
  16. {
  17. while(Frase1[i] == Palabra1[inc])
  18. {
  19. Resultado[inc] = Palabra1[inc];
  20. Palabra1[inc++];
  21. break;
  22. }
  23. }
  24.  
  25. if(strcmp(Resultado,Palabra1))
  26. {
  27. yesno = false;
  28. ZeroMemory(Resultado,MAX_L);
  29. ZeroMemory(Palabra1,MAX_L);
  30. ZeroMemory(Frase1,255);
  31. inc = 0;
  32.  
  33. }
  34. else if(!strcmp(Resultado,Palabra1))
  35. {
  36. yesno = true;
  37. ZeroMemory(Resultado,MAX_L);
  38. ZeroMemory(Palabra1,MAX_L);
  39. ZeroMemory(Frase1,255);
  40. inc = 0;
  41. }
  42. return yesno;
  43. }
  44.  


lo que pasa que lo del ZeroMemory veo que lo repito bastante,seguro ue hay alguna forma mas profesional de hacerlo pero nse:S


muchas gracias a todos los que me han ayudado ;)