Comparació de cadenes: programació C.

String Comparison C Programming



Una cadena en llenguatge C és una matriu de caràcters que finalitza amb un caràcter nul ( 0). Utilitzant aquesta propietat es comparen les cadenes.







Es poden comparar dues cadenes de diverses maneres. En aquest tutorial, primer, veurem una funció definida per l'usuari per comparar dues cadenes i, a continuació, veurem algunes funcions de biblioteca integrades que es poden utilitzar per comparar dues cadenes molt fàcilment. Per tant, comencem.



Comparació de cadenes mitjançant una funció definida per l'usuari:

Escriurem una funció stringCompare () per comparar cadenes. Recorrem les cordes i comparem cada caràcter de la corda fins que arribem al final de qualsevol o es troben totes dues o una no coincidència. Si s’arriba a la travessia fins al final de les dues cordes, llavors les cordes coincideixen; en cas contrari, les cadenes no coincideixen.



01./*userDefinedFunction.c*/
02.
03.#incloure
04.
05.intstringCompar( charstr1[ ], charstr2[ ] )
06.{
07.intjo=0;
08.
09. mentre(str1[jo] ==str2[jo] )
10.
15.
16.si(str1[jo] == ' 0' &&str2[jo] == ' 0' )
17.tornar 0;
18.en cas contrari
19.tornar -1;
20.
21.}
22.
23.
24.intprincipal()
25.{
26.charstr1[30],str2[30];
27.
28. printf ('Introduïu la primera cadena:');
29. scanf ('% [^ n]% * C ',str1);
30. printf ('Introduïu la segona cadena:');
31. scanf ('% [^ n]% * C ',str2);
32.
33.si(stringCompar(str1,str2) == 0)
34. printf (Les cordes són iguals n');
35.en cas contrari
36. printf (Les cordes no són iguals n');
37.
38.tornar 0; 39.}





Aquí recorrem les cadenes utilitzant while loop i una variable jo . Quan els caràcters són iguals en la mateixa posició de les dues cadenes, el valor de jo s'incrementa en 1 (línia 13). Si els caràcters no són iguals (línia 09) o arribem al final de la cadena (línia 11), el bucle while és un salt. Després del bucle while, comprovem si s’arriba o no a les travesses de corda (línia 16). Si s’arriba a la travessia fins al final de les dues cordes, les cordes són iguals si no.

Comparació de cadenes mitjançant funcions de biblioteca integrades:

Les funcions de biblioteca següents es poden utilitzar per a la comparació de cadenes. Totes les funcions es declaren al fitxer string.h fitxer de capçalera.



funció strcmp ():

Aquesta funció compara dues cadenes passades a la funció.

Sintaxi :

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

Valor de retorn: Retorna 0 si les cadenes són iguals. Torneu un enter negatiu si el valor ASCII del primer caràcter sense igual de la primera cadena és inferior a la segona cadena. Torneu un enter positiu si el valor ASCII del primer caràcter sense igual de la primera cadena és superior al de la segona cadena. Alguns sistemes retornen la diferència del valor ASCII del primer caràcter no coincident i alguns sistemes retornen -1 si el valor ASCII del primer caràcter no coincident de la primera cadena és inferior a la segona cadena i retornen 1 si el valor ASCII del primer caràcter no coincident de la primera cadena és més gran que la segona.

Exemple Valor de retorn Explicació
strcmp ( Hola món, hola món ) 0 Dues cordes són iguals.
strcmp ( Hola, hola 0 món ) 0 Les cadenes es comparen fins al caràcter ' 0'. Per defecte, la primera cadena acaba amb ' 0' i la segona cadena conté el caràcter ' 0' després de 'Hola'.
strcmp ( Hola 0 0 0 ″, Hola 0 món ) 0 Les cadenes es comparen fins al caràcter ' 0'.
strcmp ( Hola món, hola món ) Enter negatiu El valor ASCII del primer caràcter sense igual de la primera cadena ('H') és inferior al de la segona cadena ('h')
strcmp ( hola món, hola món ) Enter positiu El valor ASCII del primer caràcter sense igual de la primera cadena ('h') és superior al de la segona cadena ('H')

funció strncmp ():

Aquesta funció és similar a la funció strcmp () , però aquí hem d'especificar quants bytes es comparen passant un argument addicional a la funció.

Sintaxi:

int strncmp (const char *str1, const char *str2, mida_tn)

Valor de retorn: Torna la funció 0 si el primer n els caràcters de les dues cordes són iguals; en cas contrari, retorna un enter negatiu o positiu en funció del signe de les diferències entre el valor ASCII del primer personatge no coincident.

Exemple Valor de retorn Explicació
strncmp ( Hola món, hola món, 5 ) 0 Els primers 5 caràcters són els mateixos.
strncmp ( Hola, Hola 0 Món, 5 ) 0 Els primers 5 caràcters són els mateixos.
strncmp ( Hola 0 0 0 ″, Hola 0 Món, 8 ) 0 ' 0' és després dels 5 primers caràcters de les dues cadenes. Per tant, la comparació s’atura després de 5 no de 8.
strncmp ( Hola món, hola món, 5 ) Enter negatiu El valor ASCII del primer caràcter sense igual de la primera cadena ('H') és inferior al de la segona cadena ('h')

funció strcasecmp ():

Aquesta funció és similar a la funció strcmp () , però aquí les cadenes no distingeixen entre majúscules i minúscules.

Sintaxi:

intstrcasecmp(const char *str1, const char *str2)

Valor de retorn: El mateix que strcmp () , però les cordes es tracten com cas insensible .

Exemple Valor de retorn Explicació
strcasecmp ( Hola món, hola món ) 0 Dues cordes són iguals.
strcasecmp ( Hola, hola 0 món ) 0 Les cadenes es comparen fins al caràcter ' 0'. Per defecte, la primera cadena acaba amb ' 0' i la segona cadena conté el caràcter ' 0' després de 'Hola'.
strcasecmp ( Hola món, hola món ) 0 Les cordes ho són cas insensible. Per tant, Hello World i hello World són els mateixos.

funció strncasecmp ():

Aquesta funció és similar a la funció strncmp () , però aquí les cadenes no distingeixen entre majúscules i minúscules.

Sintaxi:

intstrncasecmp(const char *str1, const char *str2)

Valor de retorn: El mateix que strncmp () , quan les cadenes es tracten com a majúscules i minúscules.

Exemple Valor de retorn Explicació
strncasecmp ( Hola món, hola món, 5 ) 0 Els primers 5 caràcters són els mateixos.
strncasecmp ( Hola, Hola 0 Món, 5 ) 0 Els primers 5 caràcters són els mateixos.
strncasecmp ( Hola 0 0 0 ″, Hola 0 Món, 8 ) 0 ' 0' és després dels 5 primers caràcters de les dues cadenes. Per tant, la comparació s’atura després de 5 no de 8.
strncasecmp ( Hola món, hola món, 5 ) 0 Les cordes ho són cas insensible. Per tant, Hola i Hola són el mateix.

funció memcmp ():

Aquesta funció compara dos blocs de memòria byte per byte. Hem de passar dos indicadors dels blocs de memòria i el nombre de bytes a comparar.

Sintaxi:

int memcmp (const buit *str1, const buit *str2, mida_tn)

Valor de retorn: La funció retorna 0 si els dos blocs de memòria ( n bytes) són iguals; en cas contrari, retorna les diferències entre el primer parell de bytes no coincidents (els bytes s’interpreten com a objectes de caràcter sense signar, i després es promocionen a int).

Exemple Valor de retorn Explicació
memcmp ( Hola món, hola món, 5 ) 0 Els primers 5 caràcters són els mateixos.
memcmp ( Hola 0 0 0 ″, Hola 0 Món, 8 ) Enter negatiu Els primers 6 caràcters són els mateixos, però el setè és diferent. Aquí la comparació no s'atura com strncmp () en obtenir el caràcter ' 0'.
memcmp ( Hola món, hola món, 11 ) Enter negatiu El valor ASCII del primer caràcter sense igual de la primera cadena ('H') és inferior al de la segona cadena ('h')

Exemple:

A continuació es mostra l'exemple de codi C de totes les funcions discutides.

01./*stringCompare.c*/
02.
03.#incloure
04.#incloure
05.
06.intprincipal()
07.{
08. printf ('strcmp ('Hola món','Hola món') =>% d n', strcmp ( 'Hola món','Hola món' ));
09. printf ('strcmp ('Hola','Hola\0Mundial') =>% d n', strcmp ( 'Hola','Hola 0Món ' ));
10. printf ('strcmp ('Hola món','Hola món') =>% d n', strcmp ( 'Hola món','Hola món' ) );
11. printf ('strcmp ('Hola\0\0\0','Hola\0Mundial') =>% d n', strcmp ( 'Hola 0 0 0','Hola 0Món ' ));
12.
13. printf (' n--------------- n');
14.
15. printf ('strncmp ('Hola món','Hola món', 5) =>% d n', strncmp ( 'Hola món','Hola món',5 ));
16. printf ('strncmp ('Hola','Hola\0Mundial', 5) =>% d n', strncmp ( 'Hola','Hola 0Món ',5 ));
17. printf ('strncmp ('Hola\0\0\0','Hola\0Mundial', 8) =>% d n', strncmp ( 'Hola 0 0 0','Hola 0Món ',8 ));
18. printf ('strncmp ('Hola món','Hola món', 5) =>% d n', strncmp ( 'Hola món','Hola món',5 ));
19.
20. printf (' n--------------- n');
21.
22. printf ('strcasecmp ('Hola món','Hola món') =>% d n',strcasecmp( 'Hola món','Hola món' ));
23. printf ('strcasecmp ('Hola','Hola\0Mundial') =>% d n',strcasecmp( 'Hola','Hola 0Món ' ));
24. printf ('strcasecmp ('Hola món','Hola món') =>% d n',strcasecmp( 'Hola món','Hola món' ));
25.
26. printf (' n--------------- n');
27.
28. printf ('strncasecmp ('Hola món','Hola món', 5) =>% d n',strncasecmp( 'Hola món','Hola món',5 ) );
29. printf ('strncasecmp ('Hola','Hola\0Mundial', 5) =>% d n',strncasecmp( 'Hola','Hola 0Món ',5 ));
30. printf ('strncasecmp ('Hola\0\0\0','Hola\0Mundial', 8) =>% d n',strncasecmp( 'Hola 0 0 0','Hola 0Món ',8 ));
31. printf ('strncasecmp ('Hola món','Hola món', 5) =>% d n',strncasecmp( 'Hola món','Hola món',5 ));
32.
33. printf (' n--------------- n');
34.
35. printf ('memcmp ('Hola món','Hola món', 5) =>% d n', memcmp ( 'Hola món','Hola món',5 ) );
36. printf ('memcmp ('Hola\0\0\0','Hola\0Mundial', 8) =>% d n', memcmp ( 'Hola 0 0 0','Hola 0Món ',8 ));
37. printf ('memcmp ('Hola món','Hola món', 11) =>% d n', memcmp ( 'Hola món','Hola món',11 ));
38.
39.tornar 0; 40.}

Conclusió:

Per tant, en aquest tutorial hem vist com es poden comparar les cadenes de diverses maneres. Com hem vist, la funció stringCompare () retorna -1 per a cadenes desiguals, però es pot modificar de manera que retorni el valor ASCII del caràcter no coincident. Podeu utilitzar-lo al vostre codi, que us convé més.