STRCOLL |
Compare des chaines local |
---|---|
Langage C++ | cstring (string.h) |
Syntaxe
int strcoll(const char *str1,const char *str2) |
Paramètres
Nom | Description |
---|---|
str1 | Ce paramètre permet d'indiquer la première chaîne de caractères ASCIZ à comparer. |
str2 | Ce paramètre permet d'indiquer la deuxième chaîne de caractères ASCIZ à comparer. |
Retour
Valeur | Description |
---|---|
< 0 (Moins que zéro) | Ces valeurs permettent d'indiquer que str1 est inférieur à str2. |
0 (Zéro) | Cette valeur permet d'indiquer que str1 est égal à str2. |
> 0 (Supérieur à zéro) | Ces valeurs permettent d'indiquer que str1 est supérieur à str2. |
Description
Cette fonction permet de comparer deux chaînes de caractères en format locale sans effectuer de différence entre les majuscules ou les minuscules.
Remarques
- La fonction strcoll() compare la chaîne de caractères pointée par str1 avec celle pointée par str2. La comparaison est effectuée conformément aux paramètres régionaux spécifiés à l'aide de la fonction setlocale().
- Comparaison tenant compte de la locale : strcoll utilise la locale actuelle, définie avec setlocale, pour comparer les chaînes de caractères. Exemple :
- Résultat similaire à strcmp en locale "C" : Si la locale n'est pas modifiée (LC_COLLATE = "C"), strcoll fonctionne comme strcmp. Exemple :
- Permet de comparer des caractères spéciaux correctement : Contrairement à strcmp, strcoll est capable de comparer des caractères accentués correctement
selon la langue. Exemple en français :
Ici, 'œ' sera classé correctement par rapport à 'o', ce que strcmp ne ferait pas.
- Dépendance aux paramètres de la locale : strcoll dépend de la locale système définie avec setlocale, ce qui signifie qu'un programme peut se comporter différemment sur un autre système. Exemple :
- Peut être plus lent que strcmp : strcoll effectue une analyse plus complexe que strcmp car il prend en compte les règles de tri de la langue. Cela peut ralentir la comparaison, notamment si des fichiers volumineux doivent être triés. Si la locale n'a pas d'importance, il est préférable d'utiliser strcmp pour une meilleure performance.
- Utilisé pour le tri alphabétique multilingue : strcoll est souvent utilisé pour trier des listes de mots en respectant les règles linguistiques locales. Exemple :
- Alternative moderne en C++ avec std::locale : En C++, il est préférable d'utiliser std::locale et std::collate pour une comparaison plus sûre et portable. Exemple :
- #include <iostream>
- #include <locale>
- int main() {
- std::locale loc("fr_FR.UTF-8");
- std::collate<char> const& coll = std::use_facet<std::collate<char>>(loc);
- std::string s1 = "école", s2 = "étudiant";
- if (coll.compare(s1.data(), s1.data() + s1.size(), s2.data(), s2.data() + s2.size()) < 0) {
- std::cout << s1 << " vient avant " << s2 << std::endl;
- }
- }
Ici, la comparaison dépendra des règles de tri en français, ce qui peut être différent d'une comparaison basée sur ASCII.
Dans ce cas, les chaînes sont comparées selon l'ordre ASCII brut, sans tenir compte des spécificités linguistiques.
En anglais, "résumé" et "resume" peuvent être traités comme identiques, alors qu'en français, l'accent compte.
Ici, "äpfel" sera correctement classé après "apfel", suivant les règles du dictionnaire allemand.
Cette approche est plus adaptée au C++ moderne, surtout pour manipuler des std::string.