Programación en C

Programación C de comparación de cadenas

Programación C de comparación de cadenas
Una cadena en lenguaje C es una matriz de caracteres, que termina con un carácter nulo (\ 0). Usando esta propiedad se comparan cadenas.

Se pueden comparar dos cadenas de varias formas. En este tutorial, primero, veremos una función definida por el usuario para comparar dos cadenas, y luego veremos algunas funciones de biblioteca integradas que se pueden usar para comparar dos cadenas muy fácilmente. Entonces empecemos.

Comparación de cadenas mediante una función definida por el usuario:

Escribiremos una función stringCompare () comparar cadenas. Atravesamos las cadenas y comparamos cada carácter de la cadena hasta que llegamos al final de cualquiera o ambos o se encuentra uno que no coincide. Si el recorrido se alcanza al final de ambas cadenas, entonces las cadenas coinciden; de lo contrario, las cadenas no coinciden.

01. / * userDefinedFunction.C*/
02.
03. #incluir
04.
05. int stringCompare (char str1 [], char str2 [])
06.
07. int i = 0;
08.
09. while (str1 [i] == str2 [i])
10.
11. si (str1 [i] == '\ 0' || str2 [i] == '\ 0')
12. rotura;
13. i ++;
14.
15.
dieciséis. si (str1 [i] == '\ 0' && str2 [i] == '\ 0')
17. return 0;
18. demás
19. return -1;
20.
21.
22.
23.
24. int main ()
25.
26. char str1 [30], str2 [30];
27.
28. printf ("Ingrese la primera cadena:");
29. scanf ("% [^ \ n]% * c", str1);
30. printf ("Ingrese la segunda cadena:");
31. scanf ("% [^ \ n]% * c", str2);
32.
33. si (stringCompare (str1, str2) == 0)
34. printf ("Las cadenas son iguales \ n");
35. demás
36. printf ("Las cadenas no son iguales \ n");
37.
38. return 0; 39.

Aquí atravesamos las cadenas usando el bucle while y una variable I. Cuando los caracteres son iguales en la misma posición de ambas cadenas, el valor de I se incrementa en 1 (línea 13). Si los caracteres no son iguales (línea 09) o llegamos al final de la cadena (línea 11), entonces el ciclo while es un descanso. Después del ciclo while, verificamos que ambos recorridos de cadena se hayan alcanzado o no hasta el final (línea 16). Si el recorrido se alcanza al final de ambas cadenas, entonces las cadenas son iguales; de lo contrario, no.

Comparación de cadenas mediante funciones de biblioteca integradas:

Las siguientes funciones de biblioteca se pueden utilizar para la comparación de cadenas. Todas las funciones se declaran en el cuerda.h archivo de cabecera.

Función strcmp ():

Esta función compara dos cadenas pasadas a la función.

Sintaxis:

int strcmp (const char * str1, const char * str2)

Valor devuelto: Devuelve 0 si las cadenas son iguales. Devuelve un entero negativo si el valor ASCII del primer carácter no coincidente de la primera cadena es menor que la segunda cadena. Devuelve un entero positivo si el valor ASCII del primer carácter no coincidente de la primera cadena es mayor que la segunda cadena. Algunos sistemas devuelven la diferencia del valor ASCII del primer carácter no coincidente y algunos sistemas devuelven -1 si el valor ASCII del primer carácter no coincidente de la primera cadena es menor que la segunda cadena y devuelven 1 si el valor ASCII del primer carácter no coincidente de la primera cuerda es mayor que la segunda cuerda.

Ejemplo Valor devuelto Explicación
strcmp "Hola mundo", "Hola mundo" ) 0 Dos cadenas son iguales.
strcmp "Hola", "Hola \ 0 mundo" ) 0 Las cadenas se comparan hasta el carácter '\ 0'. La primera cadena termina por defecto con '\ 0', y la segunda cadena contiene el carácter '\ 0' después de 'Hola'.
strcmp "Hola \ 0 \ 0 \ 0", "Hola \ 0 mundo" ) 0 Las cadenas se comparan hasta el carácter '\ 0'.
strcmp "Hola mundo", "hola mundo" ) Entero negativo El valor ASCII del primer carácter no coincidente de la primera cadena ('H') es menor que la segunda cadena ('h')
strcmp"Hola mundo", "hola mundo" ) Entero positivo El valor ASCII del primer carácter no coincidente de la primera cadena ('h') es mayor que la segunda cadena ('H')

Función strncmp ():

Esta función es similar a la función strcmp (), pero aquí tenemos que especificar cuántos bytes se comparan pasando un argumento adicional a la función.

Sintaxis:

int strncmp (const char * str1, const char * str2, size_t n)

Valor devuelto: La función regresa 0 si el primero norte los caracteres de las dos cadenas son iguales; de lo contrario, devuelve un número entero negativo o positivo según el signo de las diferencias entre el valor ASCII del primer carácter no coincidente.

Ejemplo Valor devuelto Explicación
strncmp "Hola mundo", "Hola mundo", 5 ) 0 Los primeros 5 caracteres son iguales.
strncmp "Hola", "Hola \ 0 mundo", 5 ) 0 Los primeros 5 caracteres son iguales.
strncmp "Hola \ 0 \ 0 \ 0", "Hola \ 0 mundo", 8 ) 0 '\ 0' está después de los primeros 5 caracteres en ambas cadenas. Entonces, la comparación se detiene después de 5, no 8.
strncmp "Hola mundo", "hola mundo", 5 ) Entero negativo El valor ASCII del primer carácter no coincidente de la primera cadena ('H') es menor que la segunda cadena ('h')

Función strcasecmp ():

Esta función es similar a la función strcmp (), pero aquí las cadenas no distinguen entre mayúsculas y minúsculas.

Sintaxis:

int strcasecmp (const char * str1, const char * str2)

Valor devuelto: Igual que strcmp (), pero las cadenas se tratan como mayúsculas y minúsculas.

Ejemplo Valor devuelto Explicación
strcasecmp "Hola mundo", "Hola mundo" ) 0 Dos cadenas son iguales.
strcasecmp "Hola", "Hola \ 0 mundo" ) 0 Las cadenas se comparan hasta el carácter '\ 0'. La primera cadena termina por defecto con '\ 0', y la segunda cadena contiene el carácter '\ 0' después de 'Hola'.
strcasecmp "Hola mundo", "hola mundo" ) 0 Las cadenas son mayúsculas y minúsculas. Entonces, "Hola mundo" y "hola mundo" son lo mismo.

Función strncasecmp ():

Esta función es similar a la función strncmp (), pero aquí las cadenas no distinguen entre mayúsculas y minúsculas.

Sintaxis:

int strncasecmp (const char * str1, const char * str2)

Valor devuelto: Igual que strncmp (), cuando las cadenas se tratan como sensibles a mayúsculas y minúsculas.

Ejemplo Valor devuelto Explicación
strncasecmp "Hola mundo", "Hola mundo", 5 ) 0 Los primeros 5 caracteres son iguales.
strncasecmp "Hola", "Hola \ 0 mundo", 5 ) 0 Los primeros 5 caracteres son iguales.
strncasecmp "Hola \ 0 \ 0 \ 0", "Hola \ 0 mundo", 8 ) 0 '\ 0' está después de los primeros 5 caracteres en ambas cadenas. Entonces, la comparación se detiene después de 5, no 8.
strncasecmp "Hola mundo", "hola mundo", 5 ) 0 Las cadenas son mayúsculas y minúsculas. Entonces, "hola" y "hola" son lo mismo.

función memcmp ():

Esta función compara dos bloques de memoria byte por byte. Tenemos que pasar dos punteros de los bloques de memoria y el número de bytes a comparar.

Sintaxis:

int memcmp (const void * str1, const void * str2, size_t n)

Valor devuelto: La función devuelve 0 si los dos bloques de memoria (norte bytes) son iguales; de lo contrario, devuelve las diferencias entre el primer par de bytes que no coinciden (los bytes se interpretan como objetos char sin firmar y luego se promueven a int).

Ejemplo Valor devuelto Explicación
memcmp "Hola mundo", "Hola mundo", 5 ) 0 Los primeros 5 caracteres son iguales.
memcmp "Hola \ 0 \ 0 \ 0", "Hola \ 0 mundo", 8 ) Entero negativo Los primeros 6 caracteres son iguales, pero el séptimo carácter es diferente. Aquí la comparación no se detuvo como strncmp () al obtener el carácter '\ 0'.
memcmp "Hola mundo", "hola mundo", 11 ) Entero negativo El valor ASCII del primer carácter no coincidente de la primera cadena ('H') es menor que la segunda cadena ('h')

Ejemplo:

A continuación se muestra el ejemplo de código C de todas las funciones discutidas.

01. / * stringCompare.C*/
02.
03. #incluir
04. #incluir
05.
06. int main ()
07.
08. printf ("strcmp (" Hola mundo "," Hola mundo ") =>% d \ n", strcmp ("Hola mundo", "Hola mundo"));
09. printf ("strcmp (" Hola "," Hola \\ 0 mundo ") =>% d \ n", strcmp ("Hola", "Hola \ 0 mundo"));
10. printf ("strcmp (" Hola mundo "," hola mundo ") =>% d \ n", strcmp ("Hola mundo", "hola mundo"));
11. printf ("strcmp (" Hola \\ 0 \\ 0 \\ 0 "," Hola \\ 0 mundo ") =>% d \ n", strcmp ("Hola \ 0 \ 0 \ 0", "Hola \ 0 Mundo" ));
12.
13. printf ("\ n --------------- \ n");
14.
15. printf ("strncmp (" Hola mundo "," Hola mundo ", 5) =>% d \ n", strncmp ("Hola mundo", "Hola mundo", 5));
dieciséis. printf ("strncmp (" Hola "," Hola \\ 0 mundo ", 5) =>% d \ n", strncmp ("Hola", "Hola \ 0 mundo", 5));
17. printf ("strncmp (" Hola \\ 0 \\ 0 \\ 0 "," Hola \\ 0 mundo ", 8) =>% d \ n", strncmp ("Hola \ 0 \ 0 \ 0", "Hola \ 0 Mundo ", 8));
18. printf ("strncmp (" Hola mundo "," hola mundo ", 5) =>% d \ n", strncmp ("Hola mundo", "hola mundo", 5));
19.
20. printf ("\ n --------------- \ n");
21.
22. printf ("strcasecmp (" Hola mundo "," Hola mundo ") =>% d \ n", strcasecmp ("Hola mundo", "Hola mundo"));
23. printf ("strcasecmp (" Hola "," Hola \\ 0 mundo ") =>% d \ n", strcasecmp ("Hola", "Hola \ 0 mundo"));
24. printf ("strcasecmp (" Hola mundo "," hola mundo ") =>% d \ n", strcasecmp ("Hola mundo", "hola mundo"));
25.
26. printf ("\ n --------------- \ n");
27.
28. printf ("strncasecmp (" Hola mundo "," Hola mundo ", 5) =>% d \ n", strncasecmp ("Hola mundo", "Hola mundo", 5));
29. printf ("strncasecmp (" Hola "," Hola \\ 0 mundo ", 5) =>% d \ n", strncasecmp ("Hola", "Hola \ 0 mundo", 5));
30. printf ("strncasecmp (" Hola \\ 0 \\ 0 \\ 0 "," Hola \\ 0 mundo ", 8) =>% d \ n", strncasecmp ("Hola \ 0 \ 0 \ 0", "Hola \ 0 Mundo ", 8));
31. printf ("strncasecmp (" Hola mundo "," hola mundo ", 5) =>% d \ n", strncasecmp ("Hola mundo", "hola mundo", 5));
32.
33. printf ("\ n --------------- \ n");
34.
35. printf ("memcmp (" Hola mundo "," Hola mundo ", 5) =>% d \ n", memcmp ("Hola mundo", "Hola mundo", 5));
36. printf ("memcmp (" Hola \\ 0 \\ 0 \\ 0 "," Hola \\ 0 mundo ", 8) =>% d \ n", memcmp ("Hola \ 0 \ 0 \ 0", "Hola \ 0 Mundo ", 8));
37. printf ("memcmp (" Hola mundo "," hola mundo ", 11) =>% d \ n", memcmp ("Hola mundo", "hola mundo", 11));
38.
39. return 0; 40.

Conclusión:

Entonces, en este tutorial, hemos visto cómo las cadenas se pueden comparar de varias maneras. Como hemos visto, la función stringCompare () devuelve -1 para cadenas desiguales, pero esto se puede modificar para que devuelva el valor ASCII del carácter no coincidente. Puede usarlo en su código, que sea el más adecuado para usted.

Cómo descargar y jugar Sid Meier's Civilization VI en Linux
Introducción al juego Civilization 6 es una versión moderna del concepto clásico introducido en la serie de juegos Age of Empires. La idea era bastant...
Cómo instalar y jugar a Doom en Linux
Introducción a Doom La serie Doom se originó en los años 90 después del lanzamiento del Doom original. Fue un éxito instantáneo y, desde ese momento e...
Vulkan para usuarios de Linux
Con cada nueva generación de tarjetas gráficas, vemos que los desarrolladores de juegos superan los límites de la fidelidad gráfica y se acercan un pa...