Comparaison des cordes C Programmation

Comparaison des cordes C Programmation
Une chaîne en langue C est un tableau de caractères, qui est terminé avec un caractère nul (\ 0). L'utilisation de ces chaînes de propriété est comparée.

Deux cordes peuvent être comparées de diverses manières. Dans ce tutoriel, nous verrons d'abord une fonction définie par l'utilisateur pour comparer deux chaînes, puis nous verrons certaines fonctions de bibliothèque intégrées qui peuvent être utilisées pour comparer deux chaînes très facilement. Alors, commençons.

Comparaison de chaîne à l'aide d'une fonction définie par l'utilisateur:

Nous allons écrire une fonction StringCompare () Pour comparer les chaînes. Nous traversons les cordes et comparons chaque caractère de la chaîne jusqu'à ce que nous atteignions la fin de l'un ou des deux ou des incomparables se trouvent. Si la traversée est atteinte à la fin des deux cordes, les cordes sont appariées; Sinon, les cordes sont incompatibles.

01. / * UserDefinedFunction.c * /
02.
03. #inclure
04.
05. int stringCompare (char str1 [], char str2 [])
06.
07. int i = 0;
08.
09. tandis que (str1 [i] == str2 [i])
dix.
11. if (str1 [i] == '\ 0' || str2 [i] == '\ 0')
12. casser;
13. i ++;
14.
15.
16. if (str1 [i] == '\ 0' && str2 [i] == '\ 0')
17. retour 0;
18. autre
19. retour -1;
20.
21.
22.
23.
24. int main()
25.
26. char Str1 [30], str2 [30];
27.
28. printf ("Entrez la première chaîne:");
29. scanf ("% [^ \ n]% * c", str1);
30. printf ("Entrez la deuxième chaîne:");
31. scanf ("% [^ \ n]% * c", str2);
32.
33. if (StringCompare (str1, str2) == 0)
34. printf ("Les chaînes sont égales \ n");
35. autre
36. printf ("Les chaînes ne sont pas égales \ n");
37.
38. retour 0; 39.

Ici, nous traversons les cordes en utilisant la boucle pendant que la boucle et une variable je. Lorsque les caractères sont égaux dans la même position des deux cordes, la valeur de je est incrémenté de 1 (ligne 13). Si les caractères ne sont pas égaux (ligne 09) ou si nous atteignons l'extrémité de la chaîne (ligne 11), alors la boucle while est une pause. Après la boucle while, nous vérifions que les deux traversées de cordes sont atteintes à la fin ou non (ligne 16). Si la traversée est atteinte à la fin des deux cordes, alors les cordes sont égales sinon pas.

Comparaison de chaîne à l'aide de fonctions de bibliothèque intégrées:

Les fonctions de bibliothèque suivantes peuvent être utilisées pour la comparaison des chaînes. Toutes les fonctions sont déclarées dans le chaîne.H En tête de fichier.

Strcmp () Fonction:

Cette fonction compare deux chaînes passées à la fonction.

Syntaxe:

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

Valeur de retour: Retour 0 Si les cordes sont égales. Renvoie un entier négatif si la valeur ASCII du premier caractère inégalé de la première chaîne est inférieure à la deuxième chaîne. Renvoie un entier positif si la valeur ASCII du premier caractère inégalé de la première chaîne est supérieure à la deuxième chaîne. Certains systèmes renvoient la différence de la valeur ASCII du premier caractère incompatible et que certains systèmes renvoient -1 si la valeur ASCII du premier caractère inégalé de la première chaîne est inférieure à la deuxième chaîne et renvoie 1 si la valeur ASCII du premier caractère inégalé du caractère du caractère du caractère du caractère du caractère du caractère du caractère du caractère du caractère du caractère de La première chaîne est supérieure à la deuxième chaîne.

Exemple Valeur de retour Explication
strcmp ( «Hello World», «Hello World» ) 0 Deux cordes sont les mêmes.
strcmp ( «Bonjour», «Hello \ 0 Monde» ) 0 Les cordes sont comparées jusqu'à ce que le caractère '\ 0'. La première chaîne par défaut se termine par '\ 0', et la deuxième chaîne contient le caractère '\ 0' après 'Hello'.
strcmp ( "Hello \ 0 \ 0 \ 0", "Hello \ 0 Monde" ) 0 Les cordes sont comparées jusqu'à ce que le caractère '\ 0'.
strcmp ( «Hello World», «Hello World» ) Entier négatif La valeur ASCII du premier caractère inégalé de la première chaîne ('h') est inférieure à la deuxième chaîne ('h')
strcmp («Hello World», «Hello World» ) Entier positif La valeur ASCII du premier caractère inégalé de la première chaîne ('h') est supérieure à la deuxième chaîne ('h')

Strncmp () Fonction:

Cette fonction est similaire à la fonction strcmp (), Mais ici, nous devons spécifier combien d'octets sont comparés en passant un argument supplémentaire à la fonction.

Syntaxe:

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

Valeur de retour: La fonction renvoie 0 Si le premier n Les caractères des deux cordes sont égaux; Sinon, il renvoie un entier négatif ou positif en fonction du signe des différences entre la valeur ASCII du premier personnage incompatible.

Exemple Valeur de retour Explication
strncmp ( «Hello World», «Hello World», 5 ) 0 Les 5 premiers caractères sont les mêmes.
strncmp ( «Bonjour», «Hello \ 0 Monde», 5 ) 0 Les 5 premiers caractères sont les mêmes.
strncmp ( "Hello \ 0 \ 0 \ 0", "Hello \ 0 Monde", 8 ) 0 '\ 0' est après les 5 premiers caractères des deux cordes. Ainsi, la comparaison est arrêtée après 5 pas 8.
strncmp ( «Hello World», «Hello World», 5 ) Entier négatif La valeur ASCII du premier caractère inégalé de la première chaîne ('h') est inférieure à la deuxième chaîne ('h')

StrCasecmp () Fonction:

Cette fonction est similaire à la fonction strcmp (), Mais ici, les cordes ne sont pas sensibles à la casse.

Syntaxe:

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

Valeur de retour: Pareil que strcmp (), Mais les cordes sont traitées comme cas de cas.

Exemple Valeur de retour Explication
strCasecmpMP ( «Hello World», «Hello World» ) 0 Deux cordes sont les mêmes.
strCasecmpMP ( «Bonjour», «Hello \ 0 Monde» ) 0 Les cordes sont comparées jusqu'à ce que le caractère '\ 0'. La première chaîne par défaut se termine par '\ 0', et la deuxième chaîne contient le caractère '\ 0' après 'bonjour'.
strCasecmpMP ( «Hello World», «Hello World» ) 0 Les cordes sont cas de cas. Donc, «Hello World» et «Hello World» sont les mêmes.

Strncasecmp () Fonction:

Cette fonction est similaire à la fonction strncmp (), Mais ici, les cordes ne sont pas sensibles à la casse.

Syntaxe:

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

Valeur de retour: Pareil que strncmp (), Lorsque les cordes sont traitées comme une case-sensible.

Exemple Valeur de retour Explication
strncasecmp ( «Hello World», «Hello World», 5 ) 0 Les 5 premiers caractères sont les mêmes.
strncasecmp ( «Bonjour», «Hello \ 0 Monde», 5 ) 0 Les 5 premiers caractères sont les mêmes.
strncasecmp ( "Hello \ 0 \ 0 \ 0", "Hello \ 0 Monde", 8 ) 0 '\ 0' est après les 5 premiers caractères des deux cordes. Ainsi, la comparaison est arrêtée après 5 pas 8.
strncasecmp ( «Hello World», «Hello World», 5 ) 0 Les cordes sont cas de cas. Donc, «bonjour» et «bonjour» sont les mêmes.

Fonction memcmp ():

Cette fonction compare deux blocs de mémoire octet par octet. Nous devons passer deux pointeurs des blocs de mémoire et le nombre d'octets à comparer.

Syntaxe:

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

Valeur de retour: La fonction renvoie 0 si les deux blocs de mémoire (n octets) sont égaux; Sinon, il renvoie les différences entre la première paire d'octets incompatibles (les octets sont interprétés comme des objets char non signés, puis promus en int).

Exemple Valeur de retour Explication
memcmp ( «Hello World», «Hello World», 5 ) 0 Les 5 premiers caractères sont les mêmes.
memcmp ( "Hello \ 0 \ 0 \ 0", "Hello \ 0 Monde", 8 ) Entier négatif Les 6 premiers caractères sont les mêmes, mais le 7e caractère est différent. Ici, la comparaison n'est pas arrêtée comme strncmp () Lorsque vous obtenez un caractère '\ 0'.
memcmp ( «Hello World», «Hello World», 11 ) Entier négatif La valeur ASCII du premier caractère inégalé de la première chaîne ('h') est inférieure à la deuxième chaîne ('h')

Exemple:

Voici l'exemple de code C de toutes les fonctions discutées.

01. / * StringCompare.c * /
02.
03. #inclure
04. #inclure
05.
06. int main()
07.
08. printf ("strcmp (" Hello World "," Hello World ") =>% d \ n", strcmp ("Hello World", "Hello World"));
09. printf ("strcmp (" bonjour "," bonjour \\ 0 monde ") =>% d \ n", strcmp ("bonjour", "hello \ 0 world"));
dix. printf ("strcmp (" Hello World "," Hello World ") =>% d \ n", strcmp ("Hello World", "Hello World"));
11. printf ("strcmp (" Hello \\ 0 \\ 0 \\ 0 "," Hello \\ 0 world ") =>% d \ n", strcmp ("Hello \ 0 \ 0 \ 0", "Hello \ 0 Monde" ));
12.
13. printf ("\ n --------------- \ n");
14.
15. printf ("strncmp (" Hello World "," Hello World ", 5) =>% d \ n", strncmp ("Hello World", "Hello World", 5));
16. printf ("strncmp (" Bonjour "," Hello \\ 0 Monde ", 5) =>% d \ n", strncmp ("Bonjour", "Hello \ 0 Monde", 5));
17. printf ("strncmp (" Hello \\ 0 \\ 0 \\ 0 "," Hello \\ 0 world ", 8) =>% d \ n", strncmp ("Hello \ 0 \ 0", "Bonjour \ 0 monde ", 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 ("strcascMp (" Hello World "," Hello World ") =>% d \ n", strcascmpMP ("Hello World", "Hello World"));
23. printf ("strCasecmp (" Bonjour "," Hello \\ 0 Monde ") =>% D \ n", strcasecmp ("Bonjour", "Hello \ 0 Monde"));
24. printf ("strcascMp (" Hello World "," Hello World ") =>% d \ n", strcascmpMP ("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 (" Bonjour "," Hello \\ 0 monde ", 5) =>% d \ n", strncasecmp ("Bonjour", "Hello \ 0 Monde", 5));
30. printf ("strncasecMP (" Hello \\ 0 \\ 0 \\ 0 "," Hello \\ 0 world ", 8) =>% d \ n", strncasecmp ("Hello \ 0 \ 0 \ 0", "Bonjour \ 0 monde ", 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", "Bonjour \ 0 monde ", 8));
37. printf ("memcmp (" Hello World "," Hello World ", 11) =>% d \ n", memcmp ("Hello World", "Hello World", 11));
38.
39. retour 0; 40.

Conclusion:

Donc, dans ce tutoriel, nous avons vu comment les cordes peuvent être comparées de différentes manières. Comme nous l'avons vu, la fonction StringCompare () renvoie -1 pour les chaînes inégales, mais cela peut être modifié afin qu'il renvoie la valeur ASCII du caractère incompatible. Vous pouvez l'utiliser dans votre code, qui vous convient le mieux.