Ver Mensaje Individual
  #12 (permalink)  
Antiguo 18/12/2013, 09:38
dehm
 
Fecha de Ingreso: septiembre-2010
Mensajes: 494
Antigüedad: 13 años, 7 meses
Puntos: 10
Respuesta: [C++]Comprobando la existencia de palabras con un if

Jeje...la idea era que ya desarrollases tú la función más acorde con lo que realmente necesitas. Era sólo un enfoque de cómo podrías resolver el tema.
Realmente, la única cosa que habría que hacer sería comprobar no con el patrón que introduces, sino con una lista de palabras.
Podrías hacer algo como:
Código C++:
Ver original
  1. if (strcmp (p,"palabra1"==0) || strcmp(p,"palabra2"==0) || etc...)
pero aunque sólo sean 5 o 6 palabras es engorroso.
Yo te pongo una propuesta con un array de palabras a buscar. Así es más fácil recorrerlo en busca de una de ellas.
Sólamente ten en cuenta que en el array bidimensional, el segundo valor (en éste caso 12 ) corrrespondería al del elemento de mayor longitud + 1 (para poder ponerle el '\0'). Asímismo, para obtener el nº de elementos del array, debería de modificar el valor del denominador:
Código C++:
Ver original
  1. int tam=sizeof(palabrasclave)/12;
Es 12 porque todos los elementos tienen 12 caracteres para que pueda caber el de mayor valor, que es la cantidad que requiere. El resto de elementos estarán guardados en una cadena de 12 caracteres pero con varios de ellos vacíos.
Y por otro lado, la verdad es que no sé por qué del error. En mi caso, con mingw no pasa. Está claro por el error que la variable patron se salía de rango...en fin, en esta versión no se hace uso de ella. No sé si te dará error o no.
Bueno, no me enrollo más y te pongo lo que podría ser una solución:
Código C++:
Ver original
  1. #include <iostream>
  2. #include <cstring>
  3. using namespace std;
  4.  
  5. bool encontrada(char*  frase);
  6.  
  7. int main()
  8. {
  9.     char frase[200];
  10.     cout<<"Introduce una frase"<<endl;
  11.     cin.getline(frase,200);
  12.     if (encontrada (frase))
  13.     {
  14.         cout<<"SI incluye la palabra "<<endl;
  15.     }
  16.     else
  17.     {
  18.         cout<<"NO incluye la palabra "<<endl;
  19.     }
  20.     return 0;
  21. }
  22.  
  23. bool encontrada(char*  frase)
  24. {
  25.     char palabrasclave[][12] = {"picatoste","geometrica","palabro","butifarra","forosdelweb"};
  26.     int tam=sizeof(palabrasclave)/12;
  27.     char* p;
  28.     p=strtok (frase," ");
  29.     for (int i=0; i<tam; i++)
  30.     {
  31.         if (strcmp (p,palabrasclave[i])==0)
  32.             return true;
  33.     }
  34.     while ((p=strtok(0," "))!=0)
  35.     {
  36.         for (int i=0; i<tam; i++)
  37.         {
  38.             if (strcmp (p,palabrasclave[i])==0)
  39.                 return true;
  40.         }
  41.     }
  42.     return false;
  43. }
Saludos