Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: judithmateos en 31 Agosto 2017, 19:51 pm



Título: comparar cadenas
Publicado por: judithmateos en 31 Agosto 2017, 19:51 pm
Muy buenas estoy el 1º de ingeneria informatica, y me piden un ejercicio de comparar dos cadenas, simplemente decir si son iguales o no, y n se que me esta fallando que siempre me devuelve falso, alguien podria ayudarme por favor? mil gracias (me estoy volviendo loca :P)por cierto todo en c++
escribo el codigo abajo,
Código
  1. #include <iostream>
  2. #include <string>
  3. using namespace std;
  4. /*declaracion de funciones*/
  5. bool iguales (string cadena1,string cadena2);
  6.  
  7. int main (void){
  8.  
  9. string cadena1,cadena2;
  10.  
  11.  
  12. cout<<"escriba la primera palabra: "<<endl;
  13. getline(cin,cadena1);
  14. cout<<"escriba la segunda palabra: "<<endl;
  15. getline(cin,cadena2);
  16.  
  17.  
  18.  
  19.  
  20.  
  21. }
  22. /*funcion iguales*/
  23. bool iguales (string cadena1,string cadena2){
  24.  
  25. if (cadena1==cadena2){
  26.  
  27.    return true;}
  28.    else
  29.        return false;
  30. }
  31.  

Engel Lex: Los codigos deben ir en etiquetas GeSHi


Título: Re: comparar cadenas
Publicado por: De{M}iuM en 31 Agosto 2017, 20:01 pm
Buenas tardes judith.

Lo que debes hacer es comparar en primer lugar si tienen la misma longitud y a continuación comparar carácter a carácter

Código
  1. #include <iostream>
  2. #include <string>
  3. using namespace std;
  4.  
  5. /*declaracion de funciones*/
  6. bool iguales (string cadena1,string cadena2);
  7.  
  8. int main (void){
  9.  
  10. string cadena1,cadena2;
  11.  
  12. cout<<"escriba la primera palabra: "<<endl;
  13. getline(cin,cadena1);
  14. cout<<"escriba la segunda palabra: "<<endl;
  15. getline(cin,cadena2);
  16.  
  17. if (iguales(cadena1,cadena2)) {
  18. cout << "Son iguales" << endl;
  19. }
  20. else {
  21. cout << "Son distintas" << endl;
  22. }
  23.  
  24. return 0;
  25. }
  26.  
  27. /*funcion iguales*/
  28. bool iguales (string cadena1,string cadena2){
  29. if (strlen(cadena1) == strlen(cadena2)) {
  30. for (int i=0; i<strlen(cadena2); i++) {
  31. if (cadena1[i] != cadena2[i]) {
  32. return false;
  33. }
  34. }
  35. return true;
  36. }
  37. return false;
  38. }


Título: Re: comparar cadenas
Publicado por: engel lex en 31 Agosto 2017, 20:03 pm
las cadenas son arrays, si hacer cadena1==cadena2 en realidad estás comparando los punteros base de ellas... es decir solo estás viendo si están en la misma dirección de memoria o no...

para comparar cadenas debes usar de la librería string
Código
  1. strcmp(cadena1,cadena2)

si es 0 son iguales, si no es 0, no son iguales


Título: Re: comparar cadenas
Publicado por: De{M}iuM en 31 Agosto 2017, 20:05 pm
que está aprendiendo cohone!! no le digas que use strcmp o no descubrirá que los arrays nos rodean jajajaja y con los punteros lo va a flipar  ;D


Título: Re: comparar cadenas
Publicado por: engel lex en 31 Agosto 2017, 20:10 pm
eso fue por no decir

Código
  1. if (cadena1.compare(cadena2) != 0)
XD