elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado:


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  romper una cadena
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: romper una cadena  (Leído 3,476 veces)
mapers


Desconectado Desconectado

Mensajes: 638


Ver Perfil
romper una cadena
« en: 10 Julio 2010, 07:47 am »

holas gente quisiera que me den una idea de como poder romper una cadena y hacer comparaciones ....
tengo esto --->HOLA MUNDOLA DE PROGRAMOLA
quiero compara ola con toda la frase y que me den el numero de veces que se repite la palabra  con cada una de las palabras de la frase ....
se puede hacer con strcmpy pero es muy tedioso pork tendria que saltar los espacios otra idea ..gracias 


En línea

@synthesize
Wiki

Desconectado Desconectado

Mensajes: 640


Another Brick in the Wall


Ver Perfil WWW
Re: romper una cadena
« Respuesta #1 en: 10 Julio 2010, 07:52 am »

Prueba a revisar string.h

http://opengroup.org/onlinepubs/007908799/xsh/string.h.html


En línea

mapers


Desconectado Desconectado

Mensajes: 638


Ver Perfil
Re: romper una cadena
« Respuesta #2 en: 10 Julio 2010, 08:29 am »

ya lo intente hacer de esta manera ´pero no me da a ver en que me equivocado

Código
  1.  
  2. #include <iostream>
  3. using std::cout;
  4. using std::endl;
  5. #include <cstring>
  6. int main()
  7. {
  8.  char frase[]="HOLA MUNDOLA DE PROGRAMOLA";
  9.  char *parte;
  10.  cout << "LA FRASE ANTES: " << frase << endl;
  11.  parte= strtok(frase," ");
  12.    {
  13.      cout << parte<< endl;
  14.      parte = strtok(NULL, " ");
  15.      if((strstr(parte,"OLA"))==1)
  16.      {
  17.      cout<<"si"<<endl;
  18.      }
  19.    }
  20.  
  21.    system("PAUSE");
  22.    return EXIT_SUCCESS;
  23. }
  24.  
En línea

Ariath


Desconectado Desconectado

Mensajes: 2.099


Ver Perfil WWW
Re: romper una cadena
« Respuesta #3 en: 10 Julio 2010, 11:56 am »

Cita de: mapers
Código
  1. parte= strtok(frase," ");
  2.    {
  3.      cout << parte<< endl;
  4.      parte = strtok(NULL, " ");
  5.      if((strstr(parte,"OLA"))==1)
  6.      {
  7.      cout<<"si"<<endl;
  8.      }
  9.    }
  10.  

¿Las llaves de la segunda y última línea a qué corresponden?

No veo ningún while, if, for, etc ... por ahi .

Por otra parte, podrías poner simplemente un using namespace std, en vez de los 2 using que has colocado.

Aquí te dejo un ejemplo de la web de cplusplus, no aparece la comparación, pero bastaría con ubicarla en el sitio adecuado:

Cita de: cplusplus
Código
  1. /* strtok example */
  2. #include <stdio.h>
  3. #include <string.h>
  4.  
  5. int main ()
  6. {
  7.  char str[] ="- This, a sample string.";
  8.  char * pch;
  9.  printf ("Splitting string \"%s\" into tokens:\n",str);
  10.  pch = strtok (str," ,.-");
  11.  while (pch != NULL)
  12.  {
  13.    printf ("%s\n",pch);
  14.    pch = strtok (NULL, " ,.-");
  15.  
  16.    //Comentario de Ariath: Aquí podrías poner la comparación entre pch y otra cosa.
  17.  }
  18.  return 0;
  19. }
  20.  

Salu2
En línea

mapers


Desconectado Desconectado

Mensajes: 638


Ver Perfil
Re: romper una cadena
« Respuesta #4 en: 10 Julio 2010, 20:43 pm »

Código
  1.  
  2. #include <iostream>
  3. using std::cout;
  4. using std::endl;
  5. #include <cstring>
  6. int main()
  7. {
  8.  char frase[]="HOLA MUNDOLA DE PROGRAMOLA";
  9.  char *parte;
  10.  cout << "LA FRASE ANTES: " << frase << endl;
  11.  parte= strtok(frase," ");
  12.  while (parte != NULL)
  13.    {
  14.  
  15.      if((strstr(parte,"OLA"))!=0)
  16.      cout<<"si"<<endl;
  17.      cout << parte<< endl;
  18.      parte = strtok(NULL,"  ");
  19.  
  20.    }
  21.  
  22.    system("PAUSE");
  23.    return EXIT_SUCCESS;
  24. }
  25.  

a ver asi --------------->
« Última modificación: 10 Julio 2010, 20:53 pm por mapers » En línea

Ariath


Desconectado Desconectado

Mensajes: 2.099


Ver Perfil WWW
Re: romper una cadena
« Respuesta #5 en: 10 Julio 2010, 20:59 pm »

Esto... ¿Qué errores te marca?

La parte de la comparación yo la haría así:

Código
  1. if(strcmp(parte, "OLA") == 0)
  2. cout << "si" << endl;
  3.  

Usando strstr buscas la posición de la cadena 'parte' en la que se encuentra la cadena "OLA".

Aunque en el caso en que la cadena existente en 'parte' fuese "OLA" funcionaría, creo que es mejor usar strcmp, pues lo que hace es una comparación entre la cadena 1 y la cadena 2.

Si son iguales, devuelve 0, y sino, es que hay diferencias.

También creo que podrías simplemente hacer una comparación con ==, al estilo de:
Código
  1. if(parte == "OLA")

SAlu2
En línea

leogtz
. . .. ... ..... ........ ............. .....................
Colaborador
***
Desconectado Desconectado

Mensajes: 3.069


/^$/


Ver Perfil WWW
Re: romper una cadena
« Respuesta #6 en: 10 Julio 2010, 21:31 pm »

¿Te refieres a buscar si "ola" está contenida en cada una de las palabras de la frase?

Si es así el código con unos ajustes funciona:

Código
  1. #include <iostream>
  2. using std::cout;
  3. using std::endl;
  4. #include <cstring>
  5. int main(void)
  6. {
  7.  char frase[] = "HOLA MUNDOLA DE PROGRAMOLA";
  8.  char *parte;
  9.  unsigned int i = 0;
  10.  cout << "LA FRASE ANTES: " << frase << endl;
  11.  parte= strtok(frase," ");
  12.  while (parte != NULL)
  13.    {
  14.  
  15.      if((strstr(parte,"OLA")) != 0)
  16.      {
  17.          cout << parte << "<-- SI"<<endl;
  18.          i++;
  19.      }
  20.      parte = strtok(NULL,"  ");
  21.    }
  22.    cout << "\n\"ola\" contenida " << i << " veces en la frase";
  23.    std::cin.get();
  24.    return EXIT_SUCCESS;
  25. }
  26.  

Salida:
Código:
LA FRASE ANTES: HOLA MUNDOLA DE PROGRAMOLA
HOLA<-- SI
MUNDOLA<-- SI
PROGRAMOLA<-- SI

"ola" contenida 3 veces en la fras

No le veo el problema.
En línea

Código
  1. (( 1 / 0 )) &> /dev/null || {
  2. echo -e "stderrrrrrrrrrrrrrrrrrr";
  3. }
  4.  
http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Unisys propone la micro segmentación para romper la “cadena de la muerte” en ...
Noticias
wolfbcn 0 1,223 Último mensaje 12 Octubre 2016, 22:00 pm
por wolfbcn
ROMPER XOR -cifrado
Seguridad
THEGAME008 5 3,986 Último mensaje 2 Mayo 2020, 01:50 am
por THEGAME008
Romper Hash
Hacking
THEGAME008 0 1,855 Último mensaje 26 Julio 2020, 06:33 am
por THEGAME008
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines