Programación de comparación de cadena C

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

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

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

Escribiremos una función StringCompare () para comparar cadenas. Atravesamos las cuerdas y comparamos cada carácter de la cadena hasta que llegamos al final de cualquiera o ambos o uno no coincidente se encuentran. Si se alcanza el recorrido hasta el final de ambas cuerdas, entonces las cadenas coinciden; De lo contrario, las cadenas no tienen coincidencias.

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. if (str1 [i] == '\ 0' || str2 [i] == '\ 0')
12. romper;
13. i ++;
14.
15.
dieciséis. if (str1 [i] == '\ 0' && str2 [i] == '\ 0')
17. regresar 0;
18. demás
19. regreso -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. if (stringCompare (str1, str2) == 0)
34. printf ("Las cadenas son iguales \ n");
35. demás
36. printf ("Las cadenas no son iguales \ n");
37.
38. regresar 0; 39.

Aquí atravesamos las cadenas usando bucle y una variable i. Cuando los caracteres son iguales en la misma posición de ambas cadenas, el valor de i se incrementa por 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 bucle while es una ruptura. Después del bucle While, verificamos que ambos recorridos de cadena se alcancen hasta el final o no (línea 16). Si el recorrido se alcanza hasta el final de ambas cadenas, entonces las cadenas son iguales de otra manera no.

Comparación de cadenas utilizando funciones de biblioteca incorporadas:

Las siguientes funciones de la biblioteca se pueden usar para la comparación de cadenas. Todas las funciones se declaran en el cadena.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 de retorno: Regresar 0 si las cadenas son iguales. Devolver un entero negativo si el valor ASCII del primer carácter inigualable de la primera cadena es menor que la segunda cadena. Devolver un entero positivo si el valor ASCII del primer carácter inigualable 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 return -1 si el valor ASCII del primer carácter inigualable de la primera cadena es menor que la segunda cadena y devuelve 1 si el valor ASCII del primer carácter inigualable de La primera cadena es mayor que la segunda cadena.

Ejemplo Valor de retorno Explicación
strcmp ( "Hola mundo", "Hola mundo" ) 0 Dos cadenas son las mismas.
strcmp ( "Hola", "Hola \ 0 mundo" ) 0 Las cuerdas se comparan hasta que el personaje '\ 0'. La primera cadena de forma predeterminada termina 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 cuerdas se comparan hasta que el personaje '\ 0'.
strcmp ( "Hola mundo", "Hola mundo" ) Entero negativo El valor ASCII del primer carácter inigualable 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 inigualable 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 de retorno: La función regresa 0 Si el primero norte Los caracteres de las dos cuerdas son iguales; De lo contrario, devuelve un entero negativo o positivo dependiendo del signo de las diferencias entre el valor ASCII del primer personaje no coincidente.

Ejemplo Valor de retorno Explicación
strncmp ( "Hola mundo", "Hola mundo", 5 ) 0 Los primeros 5 caracteres son los mismos.
strncmp ( "Hola", "Hola \ 0 mundo", 5 ) 0 Los primeros 5 caracteres son los mismos.
strncmp ( "Hola \ 0 \ 0 \ 0", "Hola \ 0 mundo", 8 ) 0 '\ 0' es después de los primeros 5 caracteres en ambas cuerdas. 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 inigualable 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 cuerdas no son sensibles.

Sintaxis:

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

Valor de retorno: Igual que strcmp (), Pero las cuerdas se tratan como caso en caso de sensible.

Ejemplo Valor de retorno Explicación
strcasecmp ( "Hola mundo", "Hola mundo" ) 0 Dos cadenas son las mismas.
strcasecmp ( "Hola", "Hola \ 0 mundo" ) 0 Las cuerdas se comparan hasta que el personaje '\ 0'. La primera cadena de forma predeterminada termina con '\ 0', y la segunda cadena contiene el personaje '\ 0' después de 'hola'.
strcasecmp ( "Hola mundo", "Hola mundo" ) 0 Las cuerdas son caso en caso de sensible. Entonces, "hola mundo" y "hola mundo" son los mismos.

función strncasecmp ():

Esta función es similar a la función strncmp (), Pero aquí las cuerdas no son sensibles.

Sintaxis:

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

Valor de retorno: Igual que strncmp (), Cuando las cadenas se tratan como caso en sensible.

Ejemplo Valor de retorno Explicación
strncasecmp ( "Hola mundo", "Hola mundo", 5 ) 0 Los primeros 5 caracteres son los mismos.
strncasecmp ( "Hola", "Hola \ 0 mundo", 5 ) 0 Los primeros 5 caracteres son los mismos.
strncasecmp ( "Hola \ 0 \ 0 \ 0", "Hola \ 0 mundo", 8 ) 0 '\ 0' es después de los primeros 5 caracteres en ambas cuerdas. Entonces, la comparación se detiene después de 5 no 8.
strncasecmp ( "Hola mundo", "Hola mundo", 5 ) 0 Las cuerdas son caso en caso de sensible. Entonces, "hola" y "hola" son los mismos.

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 para comparar.

Sintaxis:

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

Valor de retorno: 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 no coincidentes (los bytes se interpretan como objetos de char sin firmar, luego se promueven a INT).

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

Ejemplo:

El siguiente es el ejemplo del código C de todas las funciones discutidas.

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

Conclusión:

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