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

Comparar cadenas

Estas en el tema de Comparar cadenas en el foro de C/C++ en Foros del Web. HOla por favor necesito ayuda, necesito un programa que compare dos cadenas escritas por el usuario. MI codigo es el siguiente y no se porque ...
  #1 (permalink)  
Antiguo 16/08/2008, 20:23
 
Fecha de Ingreso: agosto-2008
Mensajes: 25
Antigüedad: 15 años, 8 meses
Puntos: 0
Comparar cadenas

HOla por favor necesito ayuda, necesito un programa que compare dos cadenas escritas por el usuario. MI codigo es el siguiente y no se porque al ejecutarlo me lee la primera cadena pero no la segunda. Es raro. Si alguien puede ayudarme..

PD:el pause es para que se pare y pueda ver los resultados:


EL CODIGO:

#include<stdio.h>
#include<stdlib.h>

int main()
{

char cadena1[99];
char cadena2[99];
char* point1;
char* point2;
char a,b;
int pause,iguales,fin;



printf("intrduce la cadena 1 porfa plis\n");
scanf("%[^\n]",cadena1);


printf("introduce la cadena 2 porfa plis\n");
scanf("%[^\n]",cadena2);

point1=(char*)malloc(sizeof(char));

point2=(char*)malloc(sizeof(char));

if (point1==NULL)
{printf("error");
return -1;}
if (point2==NULL)
{printf("erorr2");
return -2;}

point1=cadena1;
point2=cadena2;
iguales=1;
fin=0;
if ((iguales==1)&&(fin==0)){
a=*point1;
b=*point2;
if (a==b)
{
iguales=1;
}
else iguales=0;
point1++;
point2++;
a=*point1;
b=*point2;
if (a=='\n')
fin=1;
if (b=='\n')
fin=1;

}





if (iguales==1)
printf("las cadenas son iguales\n");
else printf("las cadenas no son iguales\n");

scanf("%d",&pause);

return 0;
}




POR FAVOR CONTESTEN Y GRACIAS.
  #2 (permalink)  
Antiguo 17/08/2008, 01:50
Avatar de Eternal Idol  
Fecha de Ingreso: mayo-2004
Ubicación: Lucentum
Mensajes: 6.192
Antigüedad: 20 años
Puntos: 74
Respuesta: Comparar cadenas

¿Y si usas %s para el scanf?
__________________
¡Peron cumple, Evita dignifica! VIVA PERON CARAJO
  #3 (permalink)  
Antiguo 17/08/2008, 01:54
 
Fecha de Ingreso: junio-2008
Mensajes: 63
Antigüedad: 15 años, 10 meses
Puntos: 2
Respuesta: Comparar cadenas

Antes de pedir que se introduzca la cadena 2, debes quitar el carácter de nueva línea del buffer de entrada, podrías hacerlo así:

Código:
scanf("\n%[^\n]",cadena2);
Para más información, te pongo el URL a un post de otra persona que tenía un problema con el mismo caso:

http://www.forosdelweb.com/f96/problema-con-este-codigo-607350/

PD: Hay un detalle que le veo al código:

Código:
point1=(char*)malloc(sizeof(char));
point2=(char*)malloc(sizeof(char));

if (point1==NULL)
{printf("error");
return -1;}
if (point2==NULL)
{printf("erorr2");
return -2;}

point1=cadena1;
point2=cadena2;
No es necesario asignar memoria con malloc cuando vas a usar los apuntadores para apuntar a una variable ya existente, que es cuando asignas point1=cadena1 y point2=cadena2.

así la memoria que creaste con malloc la estás perdiendo, me explico con más detalle:

point1=(char*)malloc(sizeof(char)); // En este punto point1 pasa a apuntar a un sector de memoria asignado por medio de malloc.
point1=cadena1; // Ahora se cambia y point1 pasa a apuntar al sector de memoria donde está almacenado el contenido de cadena1.

Espero haberme explicado con claridad.
  #4 (permalink)  
Antiguo 17/08/2008, 04:58
 
Fecha de Ingreso: agosto-2008
Mensajes: 25
Antigüedad: 15 años, 8 meses
Puntos: 0
Respuesta: Comparar cadenas

Muxisimas gracias.
Lo del malloc no lo tenia muy claro porque era, sabia que era pa reservar memoria pero claro tiene su logica.
La verda te as explicado muy bien.
Gracias y un saludo.


POr cierto eso me funciona lo que pasa que compilo el codigo y no se porque si meto dos cadenas iguales me dice que no lo son.
Yo creo que tiene algo que ver con el \n.

Este es el codigo weno.


#include<stdio.h>
#include<stdlib.h>

int main()
{

char cadena1[99];
char cadena2[99];
char* point1;
char* point2;
char a,b;
int pause,iguales,fin;



printf("intrduce la cadena 1 porfa plis\n");
scanf("%[^\n]",cadena1);


printf("introduce la cadena 2 porfa plis\n");
scanf("\n%[^\n]",cadena2);



point1=cadena1;
point2=cadena2;
iguales=1;
fin=0;
do{

a=*point1;

b=*point2;


if (a==b)
{
iguales=1;
}
else iguales=0;
point1++;
point2++;
a=*point1;
b=*point2;
if (a=='\n')
fin=1;

if (b=='\n')
fin=1;

}while ((iguales==1)&&(fin==0));





if (iguales==1)
printf("las cadenas son iguales\n");
else printf("las cadenas no son iguales\n");

scanf("%d",&pause);

return 0;
}






Yo pienso que hay un error en la parte de verde con la comparacion, o algo del \n en la lectura de las cadenas.
:S:S
  #5 (permalink)  
Antiguo 17/08/2008, 06:25
 
Fecha de Ingreso: agosto-2008
Mensajes: 25
Antigüedad: 15 años, 8 meses
Puntos: 0
Respuesta: Comparar cadenas

Detectado el error.

En vez de comparar con '\n' hay que comparar con '\0'..



Muxas gracias por la ayuda ofrecida.
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 21:31.