Classification des caractères C - C character classification
Bibliothèque standard C |
---|
Thèmes généraux |
En-têtes divers |
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