C Programmation

Comparaison de chaînes Programmation C

Comparaison de chaînes Programmation C
Une chaîne en langage C est un tableau de caractères, qui se termine par un caractère nul (\0). En utilisant cette propriété, les chaînes sont comparées.

Deux chaînes peuvent être comparées de différentes manières. Dans ce didacticiel, nous verrons d'abord une fonction définie par l'utilisateur pour comparer deux chaînes, puis nous verrons des 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înes à l'aide d'une fonction définie par l'utilisateur :

On écrira une fonction chaîneComparer() comparer des chaînes. Nous parcourons les chaînes et comparons chaque caractère de la chaîne jusqu'à ce que nous atteignions la fin de l'un ou des deux ou d'un non-concordant. Si le parcours est atteint jusqu'à la fin des deux chaînes, alors les chaînes sont mises en correspondance ; sinon, les chaînes ne correspondent pas.

01. /*userDefinedFunction.c*/
02.
03. #inclure
04.
05. int stringCompare( char str1[ ], char str2[ ] )
06.
07. entier i=0;
08.
09. while( str1[i] == str2[i] )
dix.
11. if( str1[i] == '\0' || str2[i] == '\0' )
12. Pause;
13. je++ ;
14.
15.
16. if( str1[i] == '\0' && str2[i] == '\0' )
17. renvoie 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. renvoie 0 ; 39.

Ici, nous parcourons les chaînes en utilisant une boucle while et une variable je. Lorsque les caractères sont égaux dans la même position des deux chaînes, 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 la fin 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 chaîne sont atteintes à la fin ou non (ligne 16). Si le parcours est atteint à la fin des deux chaînes, alors les chaînes sont égales sinon pas.

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

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

fonction strcmp() :

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

Syntaxe:

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

Valeur de retour : Renvoie 0 si les chaînes sont égales. Renvoie un entier négatif si la valeur ASCII du premier caractère sans correspondance 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 sans correspondance 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 non concordant et certains systèmes renvoient -1 si la valeur ASCII du premier caractère non concordant de la première chaîne est inférieure à la deuxième chaîne et renvoient 1 si la valeur ASCII du premier caractère non concordant de la première chaîne est supérieure à la deuxième chaîne.

Exemple Valeur de retour Explication
strcmp( "Bonjour le monde", "Bonjour le monde" ) 0 Deux chaînes sont identiques.
strcmp( "Bonjour", "Bonjour\0 Monde" ) 0 Les chaînes sont comparées jusqu'au caractère '\0'. La première chaîne se termine par défaut par '\0', et la deuxième chaîne contient le caractère '\0' après 'Bonjour'.
strcmp( "Bonjour\0\0\0", "Bonjour\0 Monde" ) 0 Les chaînes sont comparées jusqu'au caractère '\0'.
strcmp( "Bonjour le monde", "Bonjour le monde" ) Entier négatif La valeur ASCII du premier caractère sans correspondance de la première chaîne ('H') est inférieure à la deuxième chaîne ('h')
strcmp("Bonjour le monde", "Bonjour le monde" ) Entier positif La valeur ASCII du premier caractère sans correspondance de la première chaîne ('h') est supérieure à la deuxième chaîne ('H')

fonction strncmp() :

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 m les caractères des deux chaînes sont égaux ; sinon, il renvoie un entier négatif ou positif selon le signe des différences entre la valeur ASCII du premier caractère incompatible.

Exemple Valeur de retour Explication
strncmp( « Bonjour le monde », « Bonjour le monde »,5 ) 0 Les 5 premiers caractères sont les mêmes.
strncmp( « Bonjour », « Bonjour\0 Monde »,5 ) 0 Les 5 premiers caractères sont les mêmes.
strncmp( "Bonjour\0\0\0", "Bonjour\0 Monde",8 ) 0 '\0' est après les 5 premiers caractères des deux chaînes. Donc, la comparaison s'arrête après 5 pas 8.
strncmp( « Bonjour le monde », « bonjour le monde »,5 ) Entier négatif La valeur ASCII du premier caractère sans correspondance de la première chaîne ('H') est inférieure à la deuxième chaîne ('h')

fonction strcasecmp() :

Cette fonction est similaire à la fonction strcmp(), mais ici les chaînes ne sont pas sensibles à la casse.

Syntaxe:

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

Valeur de retour : Pareil que strcmp(), mais les chaînes sont traitées comme sensible à la casse.

Exemple Valeur de retour Explication
strcasecmp( "Bonjour le monde", "Bonjour le monde" ) 0 Deux chaînes sont identiques.
strcasecmp( "Bonjour", "Bonjour\0 Monde" ) 0 Les chaînes sont comparées jusqu'au 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'.
strcasecmp( "Bonjour le monde", "Bonjour le monde" ) 0 Les cordes sont sensible à la casse. Donc, "Hello World" et "hello World" sont les mêmes.

fonction strncasecmp() :

Cette fonction est similaire à la fonction strncmp(), mais ici les chaînes ne sont pas sensibles à la casse.

Syntaxe:

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

Valeur de retour : Pareil que strncmp(), lorsque les chaînes sont traitées comme sensibles à la casse.

Exemple Valeur de retour Explication
strncasecmp( « Bonjour le monde », « Bonjour le monde »,5 ) 0 Les 5 premiers caractères sont les mêmes.
strncasecmp( « Bonjour », « Bonjour\0 Monde »,5 ) 0 Les 5 premiers caractères sont les mêmes.
strncasecmp( "Bonjour\0\0\0", "Bonjour\0 Monde",8 ) 0 '\0' est après les 5 premiers caractères des deux chaînes. Donc, la comparaison s'arrête après 5 pas 8.
strncasecmp( « Bonjour le monde », « bonjour le monde »,5 ) 0 Les cordes sont sensible à la casse. Donc, "Bonjour" et "Bonjour" sont les mêmes.

fonction memcmp() :

Cette fonction compare deux blocs mémoire octet par octet. Il faut passer deux pointeurs des blocs 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 mémoire (m 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( « Bonjour le monde », « Bonjour le monde »,5 ) 0 Les 5 premiers caractères sont les mêmes.
memcmp( "Bonjour\0\0\0", "Bonjour\0 Monde",8 ) Entier négatif Les 6 premiers caractères sont les mêmes, mais le 7ème caractère est différent. Ici la comparaison ne s'est pas arrêtée comme strncmp() lors de l'obtention du caractère '\0'.
memcmp( « Bonjour le monde », « bonjour le monde »,11 ) Entier négatif La valeur ASCII du premier caractère sans correspondance 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. /*stringComparer.c*/
02.
03. #inclure
04. #inclure
05.
06. int main()
07.
08. printf("strcmp( "Bonjour le monde","Bonjour le monde" ) => %d\n",strcmp( "Bonjour le monde","Bonjour le monde" ));
09. printf("strcmp( "Bonjour","Bonjour\\0 Monde" ) => %d\n",strcmp( "Bonjour","Bonjour\0 Monde" ));
dix. printf("strcmp("Bonjour le monde","bonjour le monde" ) => %d\n",strcmp( "Bonjour le monde","bonjour le monde" ) ) );
11. printf("strcmp( "Bonjour\\0\\0\\0","Bonjour\\0 Monde" ) => %d\n",strcmp( "Bonjour\0\0\0","Bonjour\0 Monde" ));
12.
13. printf("\n--------------\n");
14.
15. printf("strncmp( "Bonjour le monde","Bonjour le monde",5 ) => %d\n",strncmp( "Bonjour le monde","Bonjour le monde",5 ));
16. printf("strncmp( "Bonjour","Bonjour\\0 Monde",5 ) => %d\n",strncmp( "Bonjour","Bonjour\0 Monde",5 ));
17. printf("strncmp( "Bonjour\\0\\0\\0","Bonjour\\0 Monde",8 ) => %d\n",strncmp( "Bonjour\0\0\0","Bonjour \0 Monde",8 ));
18. printf("strncmp( "Bonjour le monde","bonjour le monde",5 ) => %d\n",strncmp( "Bonjour le monde","bonjour le monde",5 ));
19.
20. printf("\n--------------\n");
21.
22. printf("strcasecmp( "Bonjour le monde","Bonjour le monde" ) => %d\n",strcasecmp( "Bonjour le monde","Bonjour le monde" ));
23. printf("strcasecmp( "Bonjour","Bonjour\\0 Monde" ) => %d\n",strcasecmp( "Bonjour","Bonjour\0 Monde" ));
24. printf("strcasecmp("Bonjour le monde","bonjour le monde" ) => %d\n",strcasecmp( "Bonjour le monde","bonjour le monde" ));
25.
26. printf("\n--------------\n");
27.
28. printf("strncasecmp( "Bonjour le monde","Bonjour le monde",5 ) => %d\n",strncasecmp( "Bonjour le monde","Bonjour le monde",5 ) );
29. printf("strncasecmp( "Bonjour","Bonjour\\0 Monde",5 ) => %d\n",strncasecmp( "Bonjour","Bonjour\0 Monde",5 ));
30. printf("strncasecmp( "Bonjour\\0\\0\\0","Bonjour\\0 Monde",8 ) => %d\n",strncasecmp( "Bonjour\0\0\0","Bonjour \0 Monde",8 ));
31. printf("strncasecmp( "Bonjour le monde","bonjour le monde",5 ) => %d\n",strncasecmp( "Bonjour le monde","bonjour le monde",5 ));
32.
33. printf("\n--------------\n");
34.
35. printf("memcmp( "Bonjour le monde","Bonjour le monde",5 ) => %d\n",memcmp( "Bonjour le monde","Bonjour le monde",5 ) );
36. printf("memcmp( "Bonjour\\0\\0\\0","Bonjour\\0 Monde",8 ) => %d\n",memcmp( "Bonjour\0\0\0","Bonjour \0 Monde",8 ));
37. printf("memcmp( "Bonjour le monde","bonjour le monde",11 ) => %d\n",memcmp( "Bonjour le monde","bonjour le monde",11 ));
38.
39. renvoie 0 ; 40.

Conclusion:

Ainsi, dans ce tutoriel, nous avons vu comment les chaînes 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é pour qu'il renvoie la valeur ASCII du caractère incompatible. Vous pouvez l'utiliser dans votre code, ce qui vous convient le mieux.

Vulkan pour les utilisateurs Linux
Avec chaque nouvelle génération de cartes graphiques, nous voyons les développeurs de jeux repousser les limites de la fidélité graphique et se rappro...
OpenTTD contre Simutrans
Créer votre propre simulation de transport peut être amusant, relaxant et extrêmement attrayant. C'est pourquoi vous devez vous assurer que vous essay...
Tutoriel OpenTTD
OpenTTD est l'un des jeux de simulation d'entreprise les plus populaires. Dans ce jeu, vous devez créer une merveilleuse entreprise de transport. Cepe...