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
Prueba a revisar string.h
http://opengroup.org/onlinepubs/007908799/xsh/string.h.html (http://opengroup.org/onlinepubs/007908799/xsh/string.h.html)
ya lo intente hacer de esta manera ´pero no me da a ver en que me equivocado
#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;
}
Cita de: mapers
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
/* 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
#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 --------------->
Esto... ¿Qué errores te marca?
La parte de la comparación yo la haría así:
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:
if(parte == "OLA")
SAlu2
¿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:
#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.