Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: kur79 en 4 Noviembre 2014, 18:53 pm



Título: Buscar una palabra dentro de un string
Publicado por: kur79 en 4 Noviembre 2014, 18:53 pm
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:
 
Código:
 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?


Título: Re: Buscar una palabra dentro de un string
Publicado por: fary en 4 Noviembre 2014, 21:26 pm
Detectando una palabra entre espacios sería así:

Código
  1. #include <stdio.h>
  2. #include <string.h>
  3.  
  4. int BuscarPalabra(char * Cadena, char * Palabra);
  5. // Si encuenta palabra retorna 1 la función
  6.  
  7. int main()
  8. {
  9.    printf ("%i\n",BuscarPalabra("Holamundo  mundo ","mundo"));
  10.    return 0;
  11. }
  12.  
  13. int BuscarPalabra(char * Cadena, char * Palabra)
  14. {
  15.    int len = strlen(Palabra);
  16.  
  17.    while (*Cadena != '\0')
  18.    {
  19.        //printf("%s\n",Cadena);
  20.  
  21.        if (strstr(Cadena,Palabra))
  22.        {
  23.            if (*(Cadena-1) == ' ' && *(Cadena+len+1) == ' ')
  24.            {
  25.                return 1;
  26.            }
  27.        }
  28.  
  29.        Cadena++;
  30.    }
  31.  
  32.    return 0;
  33. }

Pero tendrás que agregar que la busque acabando la palabra en puntos, comas, etc.


Título: Re: Buscar una palabra dentro de un string
Publicado por: Zoso en 18 Febrero 2019, 09:22 am
Quizas este código te sea de mayor ayuda. Tuve ciertos problemas con el código anterior.

Código
  1. bool searchWord(char *cadena,  char *word)
  2. {
  3.    int length = strlen(word);
  4.    bool result = true;
  5.    for(int i=0;i<strlen(cadena);i++){
  6.        if (strstr(cadena,word)){
  7.            if (*(cadena+i-1) == ' ' && *(cadena+i+length) == ' ' ){
  8.                for(int j=0; j<length; j++){
  9.                   result = *(cadena+i+j) == *(word+j) ? true & result : false & result;
  10.                   return result;
  11.                }
  12.  
  13.            }
  14.      }
  15.    }
  16.  
  17.    return false;
  18. }


Título: Re: Buscar una palabra dentro de un string
Publicado por: Loretz en 18 Febrero 2019, 19:48 pm
Usando regex:

Código:
#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++;
    }

}