Participer au site avec un Tip
Rechercher
 

Améliorations / Corrections

Vous avez des améliorations (ou des corrections) à proposer pour ce document : je vous remerçie par avance de m'en faire part, cela m'aide à améliorer le site.

Emplacement :

Description des améliorations :

Vous êtes un professionnel et vous avez besoin d'une formation ? Programmation avec
Le langage C
Voir le programme détaillé

Fonction strcoll

La fonction strcmp La fonction strcpy


Entête à inclure

#include <string.h>  // <cstring> en C++

Fonction strcoll

int strcoll( const char * first, const char * second );

Cette fonction permet de comparer deux chaînes de caractères et de savoir si la première est inférieure, égale ou supérieure à la seconde. Cette comparaison sera réalisée en tenant compte de la localisation en cours et de manière « case insensitive » (non sensible à la casse).

Par défaut, un programme C utilise la localisation "C". Dans cette configuration, ce sont les codes numériques des caractères qui sont utilisés pour les comparer. Cela peut être problématique pour nous : par exemple, nos caractères accentués sont tous positionnés bien au-delà des lettres ASCII. Sans changement de la localisation utilisée par votre programme, le comportement de la fonction strcoll sera donc strictement équivalent à celui de la fonction strcmp.

pour changer la localisation à utiliser, vous pouvez utiliser la fonction setlocale (elle est définie dans l'entête <locale.h>), comme le montre l'exemple de code ci-dessous.

Paramètres

Valeur de retour

La fonction strcoll renvoie un entier indiquant la position relative de la première chaine par rapport à la seconde selon les règles de la localisation courante :

Exemple de code

L'exemple de code suivant se propose de montrer les différences de comportement entre les deux fonctions strcmp et strcoll.

 1 
 2 
 3 
 4 
 5 
 6 
 7 
 8 
 9 
 10 
 11 
 12 
 13 
 14 
 15 
 16 
 17 
 18 
 19 
 20 
 21 
 22 
 23 
 24 
 25 
 26 
 27 
 28 
 29 
 30 
 31 
 32 
 33 
 34 
#include <locale.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define ELEMENT_COUNT 10

int main() {
    // Si le second paramètre de la fonction setlocale est null,
    // alors cette fonction renvoit la localisation actuellement utilisée par le programme.
    // Par défaut, un programme C utilise la configuration "C" qui est basée sur ASCII (ou dérivés).
    printf( "Locale is: %s\n", setlocale( LC_ALL, NULL ) );

    // On demande à utiliser le localisation configurée sur la machine hôte
    setlocale( LC_ALL, "" );

    // On vérifie le changement de localisation (pour moi : fr_FR.utf8).
    printf( "Locale is: %s\n", setlocale( LC_ALL, NULL ) );

    // On compare les chaînes sans tenir compte de la localisation. (on ne considére que
    // les codes des caractères ; les accents sont bien après les lettres non accentuées).
    printf( "strcmp : éléphant VS fouine : %d\n", strcmp( "éléphant", "fuine" ) );

    // On compare les chaîne en tenant compte de la localisation courante.
    // Si vous êtes bien configuré en français, la chaîne de caractères "éléphant" sera
    // considérée comme étant inférieure à la chaîne "fouine".
    printf( "strcoll : éléphant VS fouine : %d\n", strcoll( "éléphant", "fuine" ) );

    // strcmp est "case sensitive", strcoll est "case insensitive" !
    printf( "strcmp : Lion VS albatros : %d\n", strcmp( "Lion", "albastros" ) );
    printf( "strcoll : Lion VS albatros : %d\n", strcoll( "Lion", "albastros" ) );

    return EXIT_SUCCESS;
}
Comparaison des fonctions strcoll et strcmp

Et voici les résultats produits par cet exemple de code :

$> gcc -o sample sample.c
$> ./sample
Locale is: C
Locale is: fr_FR.utf8
strcmp : éléphant VS fouine : 1
strcoll : éléphant VS fouine : -1
strcmp : Lion VS albatros : -1
strcoll : Lion VS albatros : 11
$>

Sujets connexes

malloc
strcat
strcmp
strcpy
strlen


La fonction strcmp La fonction strcpy




Vous êtes un professionnel et vous avez besoin d'une formation ? Programmation avec
Le langage C
Voir le programme détaillé