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)
| | |-+  (Consulta) Duda sobre funcionamiento de la Funcion strcmp
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: (Consulta) Duda sobre funcionamiento de la Funcion strcmp  (Leído 2,929 veces)
palacio29

Desconectado Desconectado

Mensajes: 103


Ver Perfil
(Consulta) Duda sobre funcionamiento de la Funcion strcmp
« en: 27 Agosto 2016, 19:20 pm »

Hola


Esta funcion devuelve 0 si las cadenas de texto son iguales (incluyendo mayúsculas y minúsculas); si la primera cadena es mayor que la segunda, devuelve un número positivo; si es mayor la segunda, devuelve un valor negativo..

Supongamos que tengo los siguientes arreglos:

 char s1[5] = "Abeja";
 char s2[5] = "Azul";

Mi duda es como se analiza cual es mayor o menor.
No entiendo como la funcion va recorriendo cada uno de los arreglos y decidir cual es mayor o menor.
La primera letra de ambos arreglos es la "A", luego ahi cambian de letra.
Como puedo pensar logicamente a esta funcion?....Va recorriendo letra x letra o que?...Y cuando dice mayor o menor se refiere al numero ascii de cada letra?


En línea

AlbertoBSD
Programador y
Moderador Global
***
Desconectado Desconectado

Mensajes: 3.696


🏴 Libertad!!!!!


Ver Perfil WWW
Re: (Consulta) Duda sobre funcionamiento de la Funcion strcmp
« Respuesta #1 en: 27 Agosto 2016, 19:39 pm »

Asi es el ASCII de cada letra compara posicion por posicion mientras sean iguales y con la primera diferencia devuelve -1 o +1 dependiendo si es menor o mayor el simbolo en cuestion.

Saludos


En línea

palacio29

Desconectado Desconectado

Mensajes: 103


Ver Perfil
Re: (Consulta) Duda sobre funcionamiento de la Funcion strcmp
« Respuesta #2 en: 27 Agosto 2016, 19:40 pm »

Asi es el ASCII de cada letra compara posicion por posicion mientras sean iguales y con la primera diferencia devuelve -1 o +1 dependiendo si es menor o mayor el simbolo en cuestion.

Saludos

Osea que si encuentra la primera diferencia ya termina el funciomamiento de la funcion?
En línea

AlbertoBSD
Programador y
Moderador Global
***
Desconectado Desconectado

Mensajes: 3.696


🏴 Libertad!!!!!


Ver Perfil WWW
Re: (Consulta) Duda sobre funcionamiento de la Funcion strcmp
« Respuesta #3 en: 27 Agosto 2016, 21:51 pm »

Asi es.

Suponiendo que tenemos:

Código
  1. char *A = "ABC";
  2. char *B = "BBC";
  3. char *C = "CBC";
  4. printf("La funcion devolvio %i\n",strcmp(A,B));
  5. printf("La funcion devolvio %i\n",strcmp(C,B));
  6.  

devulve:

Código:
La funcion devolvio -1
La funcion devolvio 1

Y en ambos casos solo comparara la primera letra y se detiene ahi por que son diferentes.
como A< B devuelve -1 y como C> B devuelve 1

En línea

do-while


Desconectado Desconectado

Mensajes: 1.276


¿Habra que sacarla de paseo?


Ver Perfil
Re: (Consulta) Duda sobre funcionamiento de la Funcion strcmp
« Respuesta #4 en: 28 Agosto 2016, 09:14 am »

¡Buenas!

Solo voy a añadir algún dato a lo ya dicho. Los caracteres, como valores representados en un ordenador, no dejan de ser números enteros, y como números tienen su orden. Puedes verlos con el siguiente código:
Código
  1. int i;
  2.  
  3. for(i = 0 ; i < 256 ; i++)
  4.    printf("%d = %c\t", i,i);
  5.  

Ahora que sabes el orden de cada caracter (si has ejecutado el bucle anterior en un programa, claro) sabrás cual es el orden alfabético de cada caracter de la tabla ASCII, y lo que hace strcmp es decirte cual es el orden alfabético de una cadena con respecto a otra utilizando estos valores.

Siempre puedes hacerte una función propia para ver cómo funciona strcmp. Aquí te dejo un ejemplo:
Código
  1. int mistrcmp(const char* s1, const char *s2)
  2. {
  3. int diferencia, i = 0;
  4.  
  5. //mientras no hayamos llegado al final de alguna de las cadenas
  6. //y los caracteres en la posicion i sean iguales
  7. while(s1[i] != '\0' && s2[i] != '\0' && (diferencia = s1[i] - s2[i]) == 0)
  8. i++; //pasamos al siguiente caracter
  9.  
  10. /* si diferencia = s1[i] - s2[i] no es cero es que hemos encontrado
  11. * caracteres diferentes en la posicion i
  12. * asi, segun la posicion que tengan s1[i] y s2[i] en la tabla ASCII se tendra:
  13. * diferencia < 0 si s1[i] < s2[i]
  14. * diferencia > 0 si s1[i] > s2[i] */
  15. if(diferencia != 0)
  16. return diferencia;
  17.  
  18. if(s1[i] == '\0') //si hemos llegado al final de la primera cadena
  19. {
  20. if(s2[i] == '\0') //y la segunda cadena tambien ha llegado al final
  21. {
  22. //es que tienen la misma longitud y que todos los caracteres son iguales
  23. return 0; //las cadenas son iguales
  24. }
  25.  
  26. //sino todos los caracteres son iguales pero la primera cadena es mas corta
  27. return -1; //asi que es alfabeticamente menor
  28. }
  29.  
  30. //sino s2[i] == '\0' y s1[i] != '\0', ya que todos los demas casos estan incluidos
  31. //en las condiciones anteriores
  32. return 1;
  33. }
  34.  
En línea

- Doctor, confundo los números y los colores.
- Vaya marrón.
- ¿Marrón? ¡Por el culo te la hinco!
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
duda sobre los crypters y su funcionamiento
Programación Visual Basic
Sai-To 0 1,422 Último mensaje 17 Mayo 2008, 16:07 pm
por Sai-To
Duda sobre el funcionamiento de index.php
PHP
AvalonII 2 3,375 Último mensaje 8 Agosto 2008, 00:49 am
por Red Mx
duda sobre funcionamiento de mi aplicacion
Programación Visual Basic
andres_5 9 3,998 Último mensaje 15 Agosto 2009, 13:17 pm
por andres_5
Duda sobre el funcionamiento de aircrack-ng con diccionario wpa
Hacking Wireless
Pallares 5 4,241 Último mensaje 3 Abril 2011, 22:26 pm
por c0d3rSh3ll
Duda sobre los DNS y la funcion gethostbyname
Programación C/C++
MRx86 4 2,277 Último mensaje 22 Septiembre 2016, 09:25 am
por MRx86
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines