J'apprends strcmp()
en C. Je comprends que lorsque deux chaînes sont égales, strcmp
renvoie 0.
Cependant, lorsque les pages de manuel indiquent que strcmp
renvoie moins de 0 lorsque la première chaîne est inférieure à la deuxième chaîne, fait-il référence à la longueur, ASCII valeurs, ou autre chose ?
En ce sens, "moins de" pour les chaînes signifie l'ordre lexicographique (alphabétique).
Donc cat
est inférieur à dog
parce que cat
est alphabétiquement avant dog
.
L'ordre lexicographique est, dans un certain sens, une extension de l'ordre alphabétique à tous les caractères ASCII (et UNICODE).
Une valeur supérieure à zéro indique que le premier caractère qui ne correspond pas a une valeur supérieure dans la première chaîne que dans la seconde, et une valeur inférieure à zéro indique le contraire.
C99 7.21.4:
Le signe d'une valeur non nulle retournée par les fonctions de comparaison memcmp , strcmp , et strncmp est déterminé par le signe de la différence entre les valeurs de la première paire de caractères (toutes deux interprétées comme caractère non signé ) qui diffèrent par les objets comparés.
Notez en particulier que le résultat ne dépend pas des paramètres régionaux actuels; LC_COLLATE
(Voir C99 7.11) affecte strcoll()
et strxfrm()
, mais pas strcmp()
.
int strcmp (const char * s1, const char * s2)
{
for(; *s1 == *s2; ++s1, ++s2)
if(*s1 == 0)
return 0;
return *(unsigned char *)s1 < *(unsigned char *)s2 ? -1 : 1;
}