Test Foro de elhacker.net SMF 2.1

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

#include<stdio.h>
#include<string.h>

int main()
{
char cadena_uno[5] = "hola";
char cadena_dos[5] = "hoal";

if(strcmp(cadena_uno, cadena_dos)==0)
   printf("Son iguales\n");

return 0;
}
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 (cpp) [Seleccionar]
if(!strncmp(cad1,cad2,sizeof cad2))
  std::cout<<"iguales"<<std::endl;
else
  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/):

/* strncmp example */
#include <stdio.h>
#include <string.h>

int main ()
{
 char str[][5] = { "R2D2" , "C3PO" , "R2A6" };
 int n;
 puts ("Looking for R2 astromech droids...");
 for (n=0 ; n<3 ; n++)
   if (strncmp (str[n],"R2xx",2) == 0)
   {
     printf ("found %s\n",str[n]);
   }
 return 0;
}


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
Cita de: 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.
Perdón, ya sabía su uso, se me pasó lo del mensaje "diferentes" por "iguales" :xD