Classification des caractères C - C character classification

La classification des caractères C est une opération fournie par un groupe de fonctions dans la norme ANSI C bibliothèque standard pour le langage de programmation C . Ces fonctions sont utilisées pour tester l'appartenance des caractères à une classe particulière de caractères, tels que les caractères alphabétiques, les caractères de contrôle, etc. Les caractères à un octet et larges sont pris en charge.

Histoire

Les premiers programmeurs en langage C travaillant sur le système d' exploitation Unix ont développé des idiomes de programmation pour classer les caractères en différents types. Par exemple, pour le jeu de caractères ASCII , l'expression suivante identifie une lettre, lorsque sa valeur est true :

('A' <= c && c <= 'Z') || ('a' <= c && c <= 'z')

Comme cela peut être exprimé dans de multiples formulations, il est devenu souhaitable d'introduire des formes courtes et standardisées de ces tests qui ont été placées dans le fichier d'en-tête à l'échelle du système ctype.h .

la mise en oeuvre

Contrairement à l'exemple ci-dessus, les routines de classification de caractères ne sont pas écrites comme des tests de comparaison. Dans la plupart des bibliothèques C, elles sont écrites sous forme de recherches de table statiques au lieu de macros ou de fonctions.

Par exemple, un tableau de 256 entiers de huit bits, agencés sous forme de champs de bits, est créé, chaque bit correspondant à une propriété particulière du caractère, par exemple isdigit, isalpha. Si le bit de poids faible des entiers correspond à la propriété isdigit, le code peut être écrit comme

#define isdigit(x) (TABLE[x] & 1)

Les premières versions de Linux utilisaient une méthode potentiellement défectueuse similaire au premier exemple de code:

#define isdigit(x) ((x) >= '0' && (x) <= '9')

Cela peut poser des problèmes si la variable x a un effet secondaire . Par exemple, si on appelle isdigit (x ++) ou isdigit (run_some_program ()) . Il n'est pas immédiatement évident que l'argument de isdigit est évalué deux fois. Pour cette raison, l'approche basée sur les tables est généralement utilisée.

Aperçu des fonctions

Les fonctions qui opèrent sur des caractères d' un octet sont définis dans ctype.h fichier d' en- tête ( de cctype en C ++). Les fonctions qui agissent sur les caractères étendus sont définis dans wctype.h fichier d' en- tête ( de cwctype en C ++).

La classification est évaluée en fonction des paramètres régionaux effectifs.


Caractère d' octet

Caractère large
La description
isalnum iswalnum vérifie si l'opérande est alphanumérique
isalpha iswalpha vérifie si l'opérande est alphabétique
islower iswlower vérifie si l'opérande est en minuscule
isupper iswupper vérifie si l'opérande est une majuscule
isdigit iswdigit vérifie si l'opérande est un chiffre
isxdigit iswxdigit vérifie si l'opérande est hexadécimal
iscntrl iswcntrl vérifie si l'opérande est un caractère de contrôle
isgraph iswgraph vérifie si l'opérande est un caractère graphique
isspace iswspace vérifie si l'opérande est un espace
isblank iswblank vérifie si l'opérande est un caractère d'espacement
isprint iswprint vérifie si l'opérande est un caractère imprimable
ispunct iswpunct vérifie si l'opérande est une ponctuation
tolower towlower convertit l'opérande en minuscules
toupper towupper convertit l'opérande en majuscule
N / A iswctype vérifie si l'opérande appartient à une classe spécifique
N / A towctrans convertit l'opérande en utilisant un mappage spécifique
N / A wctype renvoie une large classe de caractères à utiliser avec iswctype
N / A wctrans renvoie un mappage de transformation à utiliser avec towctrans

Les références

Liens externes