Buenas pues eso, tengo una cadena y un string y estoy buscando una funcion/forma de poder saber si dicho string está incluido. Me explico en practicas anteriores utilizaba:
if (strstr(titulo2.c_str(), titulo.c_str()))
Pero esa funcion tiene el problema de que si el string no es una palabra unica, sino que es parte de una tambien la cuenta y muestra. Saben de alguna funcion de c++ con la que poder cumplir esta nueva condicion?
Detectando una palabra entre espacios sería así:
#include <stdio.h>
#include <string.h>
int BuscarPalabra(char * Cadena, char * Palabra);
// Si encuenta palabra retorna 1 la función
int main()
{
printf ("%i\n",BuscarPalabra("Holamundo mundo ","mundo"));
return 0;
}
int BuscarPalabra(char * Cadena, char * Palabra)
{
int len = strlen(Palabra);
while (*Cadena != '\0')
{
//printf("%s\n",Cadena);
if (strstr(Cadena,Palabra))
{
if (*(Cadena-1) == ' ' && *(Cadena+len+1) == ' ')
{
return 1;
}
}
Cadena++;
}
return 0;
}
Pero tendrás que agregar que la busque acabando la palabra en puntos, comas, etc.
Quizas este código te sea de mayor ayuda. Tuve ciertos problemas con el código anterior.
bool searchWord(char *cadena, char *word)
{
int length = strlen(word);
bool result = true;
for(int i=0;i<strlen(cadena);i++){
if (strstr(cadena,word)){
if (*(cadena+i-1) == ' ' && *(cadena+i+length) == ' ' ){
for(int j=0; j<length; j++){
result = *(cadena+i+j) == *(word+j) ? true & result : false & result;
return result;
}
}
}
}
return false;
}
Usando regex:
#include <iostream>
#include <string>
#include <regex>
int main()
{
std::string frase{ "Galapagar, pasar y no parar; y de parar, pagar, pagar y callar." };
std::regex buscar("\\bpagar\\b");
std::sregex_iterator ppio(frase.begin(), frase.end(), buscar);
std::sregex_iterator fin = std::sregex_iterator();
std::cout << "Encontrada(s): "
<< std::distance(ppio, fin)
<< " palabra(s) completa(s):\n";
while (ppio != fin) {
std::smatch match = *ppio;
std::cout << match.str() << "\n";
ppio++;
}
}