elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Los 10 CVE más críticos (peligrosos) de 2020


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Ayuda comparando cadena de caracteres!
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Ayuda comparando cadena de caracteres!  (Leído 4,167 veces)
Mr.Captcha

Desconectado Desconectado

Mensajes: 8


Ver Perfil
Ayuda comparando cadena de caracteres!
« en: 3 Septiembre 2013, 11:37 am »

Hola!
No sé si este problema es tan pero tan básico que por eso no lo encuentro ni en la biblia de la Programación en C, ni internet o yo no sé.



Código
  1. //USANDO EL VISUAL STUDIO 12
  2. #include "stdafx.h"
  3. #include <conio.h>
  4. #include <stdio.h>
  5.  
  6.  
  7.  
  8. using namespace System;
  9.  
  10. int main(array<System::String ^> ^args)
  11. {
  12. char cadena[10];
  13. printf("Write Something!: \n");
  14. scanf("%s",cadena);
  15. if (cadena=="hola")
  16. {
  17. printf("Si!");
  18. }else
  19. {
  20. printf("no :(");
  21. };
  22. _getch();
  23.    return 0;
  24. }
  25.  

Lo que quiero hacer ,es que al escribir "hola" el if lo tome como verdadero, pero no lo acepta.
Alguna solución?
Leí algo de strcmp, pero no sé si hay alguna alternativa mejor?

Muchas Gracias de Antemano


En línea

eferion


Desconectado Desconectado

Mensajes: 1.248


Ver Perfil
Re: Ayuda comparando cadena de caracteres!
« Respuesta #1 en: 3 Septiembre 2013, 11:41 am »

los arrays no se pueden comparar directamente.

Lo que tu estás haciendo a nivel de código es lo siguiente: comparas la dirección de memoria donde se encuentra "cadena" con la posición de memoria en la que el programa ha almacenado la cadena "hola", dado que dichas posiciones son diferentes el resultado es siempre false.

Para comparar cadenas de caracteres de c usa strcmp, por ejemplo.

Aunque ya que estás incluyendo clases de c++... cambia el char* por un string y entonces la comparación si funcionará porque, al poner

Código
  1. if ( cadena == "hola" )

implícitamente se va a crear un string que va a contener la cadena hola y, después, se van a comparar ambos strings.


En línea

Mr.Captcha

Desconectado Desconectado

Mensajes: 8


Ver Perfil
Re: Ayuda comparando cadena de caracteres!
« Respuesta #2 en: 4 Septiembre 2013, 22:13 pm »

los arrays no se pueden comparar directamente.

Lo que tu estás haciendo a nivel de código es lo siguiente: comparas la dirección de memoria donde se encuentra "cadena" con la posición de memoria en la que el programa ha almacenado la cadena "hola", dado que dichas posiciones son diferentes el resultado es siempre false.

Para comparar cadenas de caracteres de c usa strcmp, por ejemplo.

Aunque ya que estás incluyendo clases de c++... cambia el char* por un string y entonces la comparación si funcionará porque, al poner

Código
  1. if ( cadena == "hola" )

implícitamente se va a crear un string que va a contener la cadena hola y, después, se van a comparar ambos strings.

Gracias! Usando el strcmp, salio perfecto.

Ahora, tengo una duda aparte, a ver si puedes explicarme el porqué.

Si tengo este código:

Código
  1. #include <stdio.h>
  2.  
  3. int main()
  4. {
  5.  
  6. char letra1[]="AAAAA";
  7. char letra2[]="BBBBB";
  8. char letra3[]="CCCCC";
  9.  
  10. printf("A: %s\nB: %s\nC: %s\n\n",letra1,letra2,letra3);
  11.  
  12. printf("Ingrese la letra D, 5 veces: ");
  13. gets(letra2);
  14.  
  15. printf("\nA: %s\nB: %s\nC: %s\n\n",letra1,letra2,letra3);
  16.  
  17. }
  18.  

Corre bien, pero cuando Ingreso más de 5 veces la "D" .... el gets hace que la cadena letra1 se sobre-escriba. Lo mismo si uso scanf
Pero yo lo he solucionado haciendo esto:
Dándole 50 posiciones a cada cadena. Haciendo esto , ya no se sobre escribe letra1, ( a menos claro que el user ingrese más de 50 caracteres )
Pero, a lo que voy es ... es técnicamente correcto poner algo así? Osea, 50 espacios , el igual a un texto..

char letra1[50]="AAAAA";
char letra2[50]="BBBBB";
char letra3[50]="CCCCC";

Código
  1. #include <stdio.h>
  2.  
  3. int main()
  4. {
  5.  
  6. char letra1[50]="AAAAA";
  7. char letra2[50]="BBBBB";
  8. char letra3[50]="CCCCC";
  9.  
  10. printf("A: %s\nB: %s\nC: %s\n\n",letra1,letra2,letra3);
  11.  
  12. printf("Ingrese la letra D, 5 veces: ");
  13. gets(letra2);
  14.  
  15. printf("\nA: %s\nB: %s\nC: %s\n\n",letra1,letra2,letra3);
  16.  
  17. }
  18.  


Gracias! Es que recién empiezo y esto fue algo que no me quedo claro.

Saludos!
En línea

Stereo

Desconectado Desconectado

Mensajes: 25


Ver Perfil
Re: Ayuda comparando cadena de caracteres!
« Respuesta #3 en: 4 Septiembre 2013, 22:38 pm »

Sí, funcionará correcto, pero si escribes 51 carácteres te volverá a pasar lo mismo, te recomiendo que uses char *, y así evitas esos problemas
En línea

Mr.Captcha

Desconectado Desconectado

Mensajes: 8


Ver Perfil
Re: Ayuda comparando cadena de caracteres!
« Respuesta #4 en: 4 Septiembre 2013, 23:06 pm »

Sí, funcionará correcto, pero si escribes 51 carácteres te volverá a pasar lo mismo, te recomiendo que uses char *, y así evitas esos problemas

Ohh Ya veo! No sé muy bien lo de punteros aún ( recien es mi primer ciclo en la Univ. así que recien estoy descrubiendo)
Yo solo sabía que existía 3 formas de hacer cadenas de caracteres , como te lo pongo aquí. No sabía que era correcto poner una cuarta como lo menciono abajo:


Código
  1. #include <stdio.h>
  2.  
  3. int main()
  4. {
  5.  
  6. //FORMA 1
  7. char cadena1[30];
  8. cadena1[0]='h';
  9. cadena1[1]='o';
  10. cadena1[2]='l';
  11. cadena1[3]='a';
  12. cadena1[4]='h';
  13. cadena1[5]=' ';
  14. cadena1[6]='m';
  15. cadena1[7]='u';
  16. cadena1[8]='n';
  17. cadena1[9]='d';
  18. cadena1[10]='o';
  19. cadena1[11]='\0';
  20.  
  21. //FORMA 2
  22. char cadena2[]="AQUI OTRA FORMA";
  23.  
  24. //FORMA 3 CUANDO EL USUARIO LA LLENA
  25. char cadena3[100];
  26.  
  27. //FORMA 4:
  28. char cadena4[20]="BLABLABLABLA";
  29.  
  30.  
  31.  
  32. }
  33.  
« Última modificación: 5 Septiembre 2013, 01:07 am por Mr.Captcha » En línea

amchacon


Desconectado Desconectado

Mensajes: 1.211



Ver Perfil
Re: Ayuda comparando cadena de caracteres!
« Respuesta #5 en: 5 Septiembre 2013, 02:08 am »

No te olvides de los punteros:
Código
  1. char* cadena = "Hola que tal";
En esta ultima forma, es importante recalcar que no puedes modificar el contenido de la cadena. Aunque si puedes hacer que el puntero apunte a una cadena nueva:
Código
  1. char * cadena = "Hola que haces";
  2. cadena = "cuentame lo que haces";
  3. cadena = "el wasap, o que haces?";
En línea

Por favor, no me manden MP con dudas. Usen el foro, gracias.

¡Visita mi programa estrella!

Rar File Missing: Esteganografía en un Rar
Eternal Idol
Kernel coder
Moderador
***
Desconectado Desconectado

Mensajes: 5.958


Israel nunca torturó niños, ni lo volverá a hacer.


Ver Perfil WWW
Re: Ayuda comparando cadena de caracteres!
« Respuesta #6 en: 5 Septiembre 2013, 14:14 pm »

El problema ahi es el uso de gets en primer lugar, aca esta explicado:
https://foro.elhacker.net/programacion_cc/lo_que_no_hay_que_hacer_en_cc_nivel_basico-t277729.0.html

Usando un puntero igual tenemos un limite, siempre hay que reservar la memoria para ese  puntero en algun lado, asi que el problema en si es usar una funcion como gets que no permite especificar el tamaño de nuestro buffer.
En línea

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
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
[?] C++ Ayuda Recorrer cadena?
Programación C/C++
Scene 2 10,900 Último mensaje 9 Septiembre 2013, 17:42 pm
por rir3760
Ayuda... Necesito imprimir los caracteres que mas se repiten de una cadena
Programación C/C++
MellaSystems 8 6,742 Último mensaje 2 Marzo 2015, 03:41 am
por engel lex
Cadena de caracteres. Ayuda urgente!
Programación C/C++
Josuex24 4 2,669 Último mensaje 2 Mayo 2015, 20:06 pm
por eferion
ayuda con cadena de caracteres
Programación C/C++
ChristianThraash 2 2,472 Último mensaje 22 Mayo 2016, 19:33 pm
por JavierScars
Ayuda en ejercicio de cadena de caracteres en python
Ejercicios
Dr420 4 4,509 Último mensaje 3 Junio 2020, 19:16 pm
por MCKSys Argentina
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines