Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: linux1 en 15 Octubre 2010, 06:06 am



Título: como puedo comparar dos cadenas de texto?
Publicado por: linux1 en 15 Octubre 2010, 06:06 am
hola lo que pasa es que quiero poder comparar dos cadenas de texto "char" por medio de un if-else


por ejemplo yo tengo estos dos valores

aba y abc vemos que son diferentes por el ultimo caracter quisiera saber como puedo comparar estos con la instruccion if y else de c  :)


Título: Re: como puedo comparar dos cadenas de texto?
Publicado por: Lunfardo en 15 Octubre 2010, 07:20 am
si es como yo entendi:


anda comporadan caracter a caracter( osea el primero con el primero, el segundo con el segundo,etc) mientras sea verdadero que siga avanzando, y si es falso que informe  lo que vos quieras,


bye =)


Título: Re: como puedo comparar dos cadenas de texto?
Publicado por: Akai en 15 Octubre 2010, 09:44 am
La cuestión es:

A) Si quieres que te diga la primera diferencia:
compara carácter a carácter hasta que encuentres una difernecia, sino, devuelve algún mensaje como que son iguales. Si encuentras la diferencia, devuelve algo como que son diferentes y para el bucle.

B) Si quieres que te las diga todas:
compara carácter a carácter mientras no llegues a la longitud de las cadenas, y en cada diferencia, di en que posición está.

Nótese que no he incluido ninguna medida de control de longitudes y demás, eso ya es tema a parte.


Título: Re: como puedo comparar dos cadenas de texto?
Publicado por: darkvidhack en 15 Octubre 2010, 13:28 pm
Bueno, lo primero, tu lo que quieres, una cadena de texto, no es "char", sino "string" , veamos:

#include <iostream>
using namespace std;

int main () {

string primera_cadena="abc";
string segunda_cadena="aba";

if (primera_cadena==segunda_cadena)
     cout << "Las dos cadenas son iguales";
else
     cout << "Las cadenas son distintas";

return 0;

}

Espero haberte ayudado ;)


Título: Re: como puedo comparar dos cadenas de texto?
Publicado por: Eternal Idol en 15 Octubre 2010, 13:53 pm
darkvidhack: no necesariamente y menos en C donde no existen.

Con un solo if-else mejor usar strcmp (http://www.cplusplus.com/reference/clibrary/cstring/strcmp/) diria yo.


Título: Re: como puedo comparar dos cadenas de texto?
Publicado por: xassiz~ en 15 Octubre 2010, 14:43 pm
Código
  1. #include<stdio.h>
  2. #include<string.h>
  3.  
  4. int main()
  5. {
  6. char cadena_uno[5] = "hola";
  7. char cadena_dos[5] = "hoal";
  8.  
  9. if(strcmp(cadena_uno, cadena_dos)==0)
  10.    printf("Son iguales\n");
  11.  
  12. return 0;
  13. }
  14.  


Título: Re: como puedo comparar dos cadenas de texto?
Publicado por: Eternal Idol en 15 Octubre 2010, 15:04 pm
pablomi, lee el enlace que deje:

"A zero value indicates that both strings are equal."

La logica o el mensaje del codigo que dejaste esta mal.


Título: Re: como puedo comparar dos cadenas de texto?
Publicado por: Littlehorse en 15 Octubre 2010, 15:20 pm
Yo usaría strncmp

Código
  1. if(!strncmp(cad1,cad2,sizeof cad2))
  2.   std::cout<<"iguales"<<std::endl;
  3. else
  4.   std::cout<<"distintas";

Con sizeof por supuesto siempre que el arreglo sea local, de lo contrario strlen. Igualmente tambien se puede pasar otro valor, uno menor por ejemplo para comparar 2 caracteres.
El ejemplo de cplusplus (http://www.cplusplus.com/reference/clibrary/cstring/strncmp/):

Código
  1. /* strncmp example */
  2. #include <stdio.h>
  3. #include <string.h>
  4.  
  5. int main ()
  6. {
  7.  char str[][5] = { "R2D2" , "C3PO" , "R2A6" };
  8.  int n;
  9.  puts ("Looking for R2 astromech droids...");
  10.  for (n=0 ; n<3 ; n++)
  11.    if (strncmp (str[n],"R2xx",2) == 0)
  12.    {
  13.      printf ("found %s\n",str[n]);
  14.    }
  15.  return 0;
  16. }

Saludos

PD: linux1, hay muchos post sobre este tema, utiliza el buscador!


Título: Re: como puedo comparar dos cadenas de texto?
Publicado por: xassiz~ en 15 Octubre 2010, 15:22 pm
pablomi, lee el enlace que deje:

"A zero value indicates that both strings are equal."

La logica o el mensaje del codigo que dejaste esta mal.
Perdón, ya sabía su uso, se me pasó lo del mensaje "diferentes" por "iguales" :xD