Klasifikace znaků C. - C character classification
![]() | tento článek potřebuje další citace pro ověření.Říjen 2011) (Zjistěte, jak a kdy odstranit tuto zprávu šablony) ( |
C standardní knihovna |
---|
Obecná témata |
Různé záhlaví |
Klasifikace znaků C. je operace poskytovaná skupinou funkcí v Standardní knihovna ANSI C. pro Programovací jazyk C.. Tyto funkce se používají k testování znaků pro členství v určité třídě znaků, jako jsou abecední znaky, řídicí znaky atd. Podporovány jsou jednobajtové i široké znaky.[1]
Dějiny
Časní programátoři v jazyce C pracující na Unix vyvinutý operační systém programovací idiomy pro klasifikaci znaků do různých typů. Například pro ASCII znaková sada, následující výraz identifikuje písmeno, pokud je jeho hodnota skutečný:
('A' <= c&& c <= 'Z') || ('a' <= c&& c <= 'z')
Protože to lze vyjádřit ve více formulacích, bylo žádoucí zavést krátké standardizované formy takových testů, které byly umístěny do souboru záhlaví celého systému. ctype.h.
Implementace
Na rozdíl od výše uvedeného příkladu nejsou rutiny klasifikace znaků psány jako srovnávací testy. Ve většině knihoven jazyka C se místo maker nebo funkcí zapisují jako statické vyhledávání tabulek.
Například je vytvořeno pole 256 osmibitových celých čísel, uspořádaných jako bitová pole, kde každý bit odpovídá určité vlastnosti znaku, např. Isdigit, isalpha. Pokud bit nejnižšího řádu celých čísel odpovídá vlastnosti isdigit, mohl by být kód zapsán jako
#define isdigit (x) (TABULKA [x] & 1)
Rané verze Linux použil potenciálně vadnou metodu podobnou první ukázce kódu:
#define isdigit (x) ((x)> = '0' && (x) <= '9')
To může způsobit problémy, pokud proměnná X má vedlejší účinek. Například pokud někdo volá isdigit (x ++) nebo isdigit (run_some_program ()). Není okamžitě zřejmé, že argument pro je číslice je hodnocena dvakrát. Z tohoto důvodu se obecně používá přístup založený na tabulkách.
Přehled funkcí
Funkce, které pracují s jednobajtovými znaky, jsou definovány v ctype.h hlavičkový soubor (cctype v C ++). Funkce, které pracují se širokými znaky, jsou definovány v wctype.h hlavičkový soubor (cwctype v C ++).
Klasifikace se hodnotí podle platného národního prostředí.
Byte charakter | Široký charakter | Popis |
---|---|---|
isalnum | iswalnum | zkontroluje, zda je operand alfanumerický |
isalfa | iswalpha | zkontroluje, zda je operand abecední |
nižší | iswlower | zkontroluje, zda je operand malými písmeny |
je nahoře | iswupper | zkontroluje, zda je operand velká |
je číslice | iswdigit | zkontroluje, zda je operand číslice |
isxdigit | iswxdigit | zkontroluje, zda je operand šestnáctkový |
iscntrl | iswcntrl | zkontroluje, zda je operand kontrolní znak |
isgraph | iswgraph | zkontroluje, zda je operand grafickým znakem |
isspace | iswspace | zkontroluje, zda je operand prostor |
isblank | iswblank | zkontroluje, zda je operand znakem mezery |
isprint | iswprint | zkontroluje, zda je operand tisknutelný znak |
jepunkční | je nefunkční | zkontroluje, zda je operand interpunkce |
snížit | Towlower | převede operand na malá písmena |
toupper | odtahovač | převede operand na velká písmena |
N / A | iswctype | zkontroluje, zda operand spadá do konkrétní třídy |
N / A | towctrans | převede operand pomocí konkrétního mapování |
N / A | wctype | vrací širokou třídu znaků pro použití s iswctype |
N / A | wctrans | vrací transformační mapování, které se má použít s towctrans |
Reference
- ^ Specifikace ISO / IEC 9899: 1999 (PDF). str. 193, § 7.4.