como puedo comparar dos cadenas de texto?

Iniciado por linux1, 15 Octubre 2010, 06:06 AM

0 Miembros y 1 Visitante están viendo este tema.

linux1

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  :)



Lunfardo

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 =)

Akai

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.

darkvidhack

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 ;)
live and let die

la duda es la base de todo conocimiento

Eternal Idol

darkvidhack: no necesariamente y menos en C donde no existen.

Con un solo if-else mejor usar strcmp diria yo.
La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón

xassiz~

#5

#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;
}

Eternal Idol

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.
La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón

Littlehorse

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:

/* 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!
An expert is a man who has made all the mistakes which can be made, in a very narrow field.

xassiz~

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