romper una cadena

Iniciado por mapers, 10 Julio 2010, 07:47 AM

0 Miembros y 1 Visitante están viendo este tema.

mapers

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 

@synthesize


mapers

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

Código (cpp) [Seleccionar]


#include <iostream>
using std::cout;
using std::endl;
#include <cstring>
int main()
{
  char frase[]="HOLA MUNDOLA DE PROGRAMOLA";
  char *parte;
  cout << "LA FRASE ANTES: " << frase << endl;
  parte= strtok(frase," ");
    {
      cout << parte<< endl;
      parte = strtok(NULL, " ");
      if((strstr(parte,"OLA"))==1)
      {
      cout<<"si"<<endl;
      }
    }

    system("PAUSE");
    return EXIT_SUCCESS;
}


Ariath

Cita de: mapers
Código (cpp) [Seleccionar]

parte= strtok(frase," ");
    {
      cout << parte<< endl;
      parte = strtok(NULL, " ");
      if((strstr(parte,"OLA"))==1)
      {
      cout<<"si"<<endl;
      }
    }


¿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 (cpp) [Seleccionar]

/* strtok example */
#include <stdio.h>
#include <string.h>

int main ()
{
  char str[] ="- This, a sample string.";
  char * pch;
  printf ("Splitting string \"%s\" into tokens:\n",str);
  pch = strtok (str," ,.-");
  while (pch != NULL)
  {
    printf ("%s\n",pch);
    pch = strtok (NULL, " ,.-");

    //Comentario de Ariath: Aquí podrías poner la comparación entre pch y otra cosa.
  }
  return 0;
}


Salu2

mapers

#4
Código (cpp) [Seleccionar]


#include <iostream>
using std::cout;
using std::endl;
#include <cstring>
int main()
{
 char frase[]="HOLA MUNDOLA DE PROGRAMOLA";
 char *parte;
 cout << "LA FRASE ANTES: " << frase << endl;
 parte= strtok(frase," ");
 while (parte != NULL)
   {
     
     if((strstr(parte,"OLA"))!=0)
     cout<<"si"<<endl;
     cout << parte<< endl;
     parte = strtok(NULL,"  ");
     
   }

   system("PAUSE");
   return EXIT_SUCCESS;
}


a ver asi --------------->

Ariath

Esto... ¿Qué errores te marca?

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

Código (cpp) [Seleccionar]

if(strcmp(parte, "OLA") == 0)
cout << "si" << endl;


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 (cpp) [Seleccionar]
if(parte == "OLA")

SAlu2

leogtz

¿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 (cpp) [Seleccionar]
#include <iostream>
using std::cout;
using std::endl;
#include <cstring>
int main(void)
{
  char frase[] = "HOLA MUNDOLA DE PROGRAMOLA";
  char *parte;
  unsigned int i = 0;
  cout << "LA FRASE ANTES: " << frase << endl;
  parte= strtok(frase," ");
  while (parte != NULL)
    {

      if((strstr(parte,"OLA")) != 0)
      {
          cout << parte << "<-- SI"<<endl;
          i++;
      }
      parte = strtok(NULL,"  ");
    }
    cout << "\n\"ola\" contenida " << i << " veces en la frase";
    std::cin.get();
    return EXIT_SUCCESS;
}


Salida:
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.
Código (perl) [Seleccionar]

(( 1 / 0 )) &> /dev/null || {
echo -e "stderrrrrrrrrrrrrrrrrrr";
}

http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com