Foros del Web » Programación para mayores de 30 ;) » C/C++ »

[C++]Comprobando la existencia de palabras con un if

Estas en el tema de [C++]Comprobando la existencia de palabras con un if en el foro de C/C++ en Foros del Web. Lo primero, gracias por atender mi duda, os dejo por aquí el paste con el código, es algo muy simple puesto que estoy aprendiendo así ...
  #1 (permalink)  
Antiguo 16/12/2013, 15:26
 
Fecha de Ingreso: diciembre-2013
Mensajes: 12
Antigüedad: 10 años, 4 meses
Puntos: 0
Pregunta [C++]Comprobando la existencia de palabras con un if

Lo primero, gracias por atender mi duda, os dejo por aquí el paste con el código, es algo muy simple puesto que estoy aprendiendo así que disculpad si hay alguna incoherencia o algo raro.

Código: http://paste2.org/YVjd2DAg

En el caso 10 (a partir de línea 211) el programa con un if u otra sentencia fácil de entender para mí, quiero que el programa compruebe la existencia de varias palabras, en el primer if (o lo que sea) compruebe si existe la palabra constante Y geometrica, en ese caso que se vea por pantalla el cout ahí definido:

Código:
cout << "Es una renta constante geometrica";
Muchas gracias por todo.

Att: Ferreon
  #2 (permalink)  
Antiguo 17/12/2013, 01:00
Avatar de vangodp  
Fecha de Ingreso: octubre-2013
Mensajes: 934
Antigüedad: 10 años, 7 meses
Puntos: 38
Respuesta: [C++]Comprobando la existencia de palabras con un if

if (strcmp(palabra1,palabra2) == 0){
//si son iguales
}

if (strcmp(palabra1,palabra2) != 0){
//si no son iguales
}

necesita poner #include <string.h > al principio.
  #3 (permalink)  
Antiguo 17/12/2013, 01:16
Avatar de vangodp  
Fecha de Ingreso: octubre-2013
Mensajes: 934
Antigüedad: 10 años, 7 meses
Puntos: 38
Respuesta: [C++]Comprobando la existencia de palabras con un if

Código C++:
Ver original
  1. #include <iostream>
  2. #include <windows.h>
  3. //#include <string.h>
  4.  
  5. using namespace std;
  6.  
  7. int main (){
  8.  
  9.     char a [20]= "constante";
  10.     char b [20]= "constante";
  11.     char c [20]= "constantine";
  12.  
  13.     if (strcmp(a,b) == 0){
  14.         cout << "a y b SI son iguales:\t" << a << "==" << b << endl;
  15.     }
  16.  
  17.     if (strcmp(a,c) != 0){
  18.         cout << "a y c NO son iguales: \t" << a << "!=" << c << endl;
  19.     }
  20.    
  21.    
  22.  
  23.     system("pause>null");
  24.     return 0;
  25. }

observe que el include string.h esta como comontario, creo que iostream cumple con esa funcion.
Caso no te ande quitale el // de string.h
  #4 (permalink)  
Antiguo 17/12/2013, 01:18
Avatar de vangodp  
Fecha de Ingreso: octubre-2013
Mensajes: 934
Antigüedad: 10 años, 7 meses
Puntos: 38
Respuesta: [C++]Comprobando la existencia de palabras con un if

la funcion strcmp(a,b) retorna 1 si son iguales y 0 si son diferentes.
Puedes hacer un bucle for o for doble e ir pasando las palabras que quieras comprobar.
  #5 (permalink)  
Antiguo 17/12/2013, 05:07
 
Fecha de Ingreso: diciembre-2013
Mensajes: 12
Antigüedad: 10 años, 4 meses
Puntos: 0
Respuesta: [C++]Comprobando la existencia de palabras con un if

Gracias por la distintas respuestas pero me salta el error:

"La inicialización de a/b/c se omite en la etiqueta "case"

he probado a poner en vez de case 10, if (seleccion == 10), pero no la reconoce y me manda directamente al final:

Cita:
cout << "Si quieres continuar pulsa 1, si no pulsa 0";
----- EDIT ----
He probado el codigo que enviaste de comprobar constante y constantine pero eso comprueba que sean o no iguales unas palabras definidas en el programa, yo quiero, que en un texto introducido por el usuario (cin >> texto;) se busquen si existen varias palabras y se envie un mensaje (cout) al usuario.
  #6 (permalink)  
Antiguo 17/12/2013, 06:35
 
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

Sólo he mirado tu código por encima, pero se me ocurre que te pudiera faltar algún break al finalizar un case
En concreto los "case" 9,10 y 11 no los tienen. También es buena práctica recoger el resto de cases en un default.
Saludos
  #7 (permalink)  
Antiguo 17/12/2013, 06:47
 
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

Respecto a la duda....puedes usar la función strcmp, como te ha apuntado vangodp.

Para ello has de incluir la biblioteca cstring
El prototipo de la función es int strcmp(const char *s1, const char *s2);
Para poder pasarle como argumentos 2 const char*, puedes hacer así (es muy cutre pero ya tu puedes ponerlos mas elegante):

Código C++:
Ver original
  1. char entrada[20];//una cantidad suficiente
  2.             cin >> entrada;
  3.             if (strcmp (entrada,"geometrica")==0)
  4.             {
  5.                 cout << "Es una renta constante geometrica";
  6.                 system("PAUSE");
  7.             }

sobre la función strcmp, realmente retorna 0 si las cadenas comparadas son iguales, un nº>0 si la primera cadena es mayor que la segunda, y un nº negativo si es al contrario.

El hecho de guardar la entrada del teclado en un array fijo es para poder usar ese array como const char* en la función. Ten la precaución de darle una longitud suficiente para que almacene la entrada más grande que quieras que almacene.
Saludos
  #8 (permalink)  
Antiguo 17/12/2013, 07:37
 
Fecha de Ingreso: diciembre-2013
Mensajes: 12
Antigüedad: 10 años, 4 meses
Puntos: 0
Respuesta: [C++]Comprobando la existencia de palabras con un if

Muchas gracias por la respuesta, ya casi lo tengo. Como verás en las siguientes imágenes, solo te devuelve el if cuando es exactamente la palabra geometrica, en caso de que ponga otra cosa, aunque lleve incluida dicha palabra, te devuelve el else.

http://gyazo.com/bab44da514a28a5313f8448b38062cd9

http://gyazo.com/d9468cb6cd6fa6a963a064adafc019a2

Quiero que en un texto que escriba el usuario, SI la palabra geometrica está incluida en el texto, aunque no sea la única, te devuelva el if.

Saludos y gracias por responder tan rapido.
  #9 (permalink)  
Antiguo 17/12/2013, 10:55
Avatar de L3m0n  
Fecha de Ingreso: diciembre-2011
Mensajes: 219
Antigüedad: 12 años, 4 meses
Puntos: 46
Respuesta: [C++]Comprobando la existencia de palabras con un if

Si estas trabajando en C++ y usas la clase string puedes hacer string1 == string2, ya que el operador == se puede usar para comparar 2 strings.
  #10 (permalink)  
Antiguo 17/12/2013, 18:04
 
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

Hola:
Tal vez puedas combinar el uso de strcmp y de strtok.
La idea es ir sacando cada palabra de la frase e ir comparándola con la palabra a comprobar. Te pongo un ejemplo donde se busca una palabra dentro de una frase, pero la función se puede mejorar para que busque varias palabras.
No sé si estará muy bien del todo. A ver si alguien que sepa más te puede decir si éste es un buen método.
Código C++:
Ver original
  1. #include <iostream>
  2. #include <cstring>
  3. using namespace std;
  4.  
  5. bool encontrada(char*  frase, char* patron);
  6.  
  7. int main()
  8. {
  9.     char frase[200];
  10.     char patron[10];
  11.     cout<<"Introduce una frase acabada en ENTER"<<endl;
  12.     cin.getline(frase,200);
  13.     cout<<"Introduce palabra a comprobar"<<endl;
  14.     cin>>patron;
  15.     cout<<"La frase: "<<frase;
  16.     if (encontrada (frase,patron))
  17.     {
  18.          cout<<" incluye la palabra "<<"\""<<patron<<"\""<<endl;
  19.     }
  20.     else
  21.     {
  22.         cout<<" NO incluye la palabra "<<"\""<<patron<<"\""<<endl;
  23.     }
  24.     return 0;
  25. }
  26.  
  27. bool encontrada(char*  frase, char* patron)
  28. {
  29.     char* p;
  30.     p=strtok (frase," ");
  31.     if (strcmp (p,patron)==0)
  32.     return true;
  33.     else
  34.     {
  35.         while (p=strtok(0," "))
  36.         {
  37.             if (strcmp (p,patron)==0)
  38.             return true;
  39.         }
  40.     }
  41.     return false;
  42. }
  #11 (permalink)  
Antiguo 18/12/2013, 08:58
 
Fecha de Ingreso: diciembre-2013
Mensajes: 12
Antigüedad: 10 años, 4 meses
Puntos: 0
Respuesta: [C++]Comprobando la existencia de palabras con un if

Gracias por la respuesta, he probado ese código tal cual y obtengo lo siguiente:

http://gyazo.com/d3dddbb9f7559a8479f01486a5ab37f5

Funciona bien excepto por ese error que no se identificar, pero quiero que las palabras no las defina el usuario (las palabras a buscar en la frase me refiero) sino que solamente introduzca una frase y las palabras (son 5 o 6) que se definan en el código se busquen automáticamente, si me haces ese arreglo en el código ya estará todo bien

Saludos y gracias por todo ¡¡
  #12 (permalink)  
Antiguo 18/12/2013, 09:38
 
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

Etiquetas: existencia, palabras, programa
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 06:03.