Buscar una palabra dentro de un string

Iniciado por kur79, 4 Noviembre 2014, 18:53 PM

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

kur79

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?

fary

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.
Un byte a la izquierda.

Zoso

Quizas este código te sea de mayor ayuda. Tuve ciertos problemas con el código anterior.

Código (cpp) [Seleccionar]
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;
}

Loretz

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++;
    }

}