Comparación de cadenas: programación en C

String Comparison C Programming



Una cadena en lenguaje C es una matriz de caracteres que termina con un carácter nulo ( 0). Con esta propiedad, se comparan las 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 () para comparar cadenas. Atravesamos las cadenas y comparamos cada carácter de la cadena hasta que llegamos al final de uno 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.En tstringCompare( carbonizarsestr1[ ], carbonizarsestr2[ ] )
06.{
07.En tI=0;
08.
09. tiempo(str1[I] ==str2[I] )
10.
15.
16.si(str1[I] == '' &&str2[I] == '' )
17.regreso 0;
18.demás
19.regreso -1;
20.
21.}
22.
23.
24.En tprincipal()
25.{
26.carbonizarsestr1[30],str2[30];
27.
28. printf ('Ingrese la primera cadena:');
29. scanf ('%[^ orte]%*c',str1);
30. printf ('Ingrese la segunda cadena:');
31. scanf ('%[^ orte]%*c',str2);
32.
33.si(stringCompare(str1,str2) == 0)
34. printf ('Las cuerdas son iguales orte');
35.demás
36. printf ('Las cuerdas no son iguales orte');
37.
38.regreso 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 una interrupción. 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 string.h archivo de cabecera.



Función strcmp ():

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

Sintaxis :

En t strcmp (constante carbonizarse *str1, constante carbonizarse *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.

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 de forma predeterminada 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:

En t strncmp (constante carbonizarse *str1, constante carbonizarse *str2, size_tnorte)

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:

En tstrcasecmp(constante carbonizarse *str1, constante carbonizarse *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 de forma predeterminada con ' 0', y la segunda cadena contiene el carácter ' 0' después de 'Hola'.
strcasecmp Hola mundo, hola mundo ) 0 Las cadenas son sensible a mayúsculas y minúsculas. Entonces, Hello World y hello World 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:

En tstrncasecmp(constante carbonizarse *str1, constante carbonizarse *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 sensible a mayúsculas y minúsculas. Entonces, hola y hola son lo mismo.

Función memcmp ():

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

Sintaxis:

En t memcmp (constante vacío *str1, constante vacío *str2, size_tnorte)

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.En tprincipal()
07.{
08. printf ('strcmp ('Hola Mundo','Hola Mundo') =>% d orte', strcmp ( 'Hola Mundo','Hola Mundo' ));
09. printf ('strcmp ('Hola','Hola\0Mundo') =>% d orte', strcmp ( 'Hola','HolaMundo' ));
10. printf ('strcmp ('Hola Mundo','Hola Mundo') =>% d orte', strcmp ( 'Hola Mundo','Hola Mundo' ) );
11. printf ('strcmp ('Hola\0\0\0','Hola\0Mundo') =>% d orte', strcmp ( 'Hola','HolaMundo' ));
12.
13. printf (' orte--------------- orte');
14.
15. printf ('strncmp ('Hola Mundo','Hola Mundo', 5) =>% d orte', strncmp ( 'Hola Mundo','Hola Mundo',5 ));
16. printf ('strncmp ('Hola','Hola\0Mundo', 5) =>% d orte', strncmp ( 'Hola','HolaMundo',5 ));
17. printf ('strncmp ('Hola\0\0\0','Hola\0Mundo', 8) =>% d orte', strncmp ( 'Hola','HolaMundo',8 ));
18. printf ('strncmp ('Hola Mundo','Hola Mundo', 5) =>% d orte', strncmp ( 'Hola Mundo','Hola Mundo',5 ));
19.
20. printf (' orte--------------- orte');
21.
22. printf ('strcasecmp ('Hola Mundo','Hola Mundo') =>% d orte',strcasecmp( 'Hola Mundo','Hola Mundo' ));
23. printf ('strcasecmp ('Hola','Hola\0Mundo') =>% d orte',strcasecmp( 'Hola','HolaMundo' ));
24. printf ('strcasecmp ('Hola Mundo','Hola Mundo') =>% d orte',strcasecmp( 'Hola Mundo','Hola Mundo' ));
25.
26. printf (' orte--------------- orte');
27.
28. printf ('strncasecmp ('Hola Mundo','Hola Mundo', 5) =>% d orte',strncasecmp( 'Hola Mundo','Hola Mundo',5 ) );
29. printf ('strncasecmp ('Hola','Hola\0Mundo', 5) =>% d orte',strncasecmp( 'Hola','HolaMundo',5 ));
30. printf ('strncasecmp ('Hola\0\0\0','Hola\0Mundo', 8) =>% d orte',strncasecmp( 'Hola','HolaMundo',8 ));
31. printf ('strncasecmp ('Hola Mundo','Hola Mundo', 5) =>% d orte',strncasecmp( 'Hola Mundo','Hola Mundo',5 ));
32.
33. printf (' orte--------------- orte');
34.
35. printf ('memcmp ('Hola Mundo','Hola Mundo', 5) =>% d orte', memcmp ( 'Hola Mundo','Hola Mundo',5 ) );
36. printf ('memcmp ('Hola\0\0\0','Hola\0Mundo', 8) =>% d orte', memcmp ( 'Hola','HolaMundo',8 ));
37. printf ('memcmp ('Hola Mundo','Hola Mundo', 11) =>% d orte', memcmp ( 'Hola Mundo','Hola Mundo',11 ));
38.
39.regreso 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 un valor ASCII de carácter no coincidente. Puede usarlo en su código, que sea el más adecuado para usted.