ctype.h
ctype.h
是C標準函數庫中的標頭檔,定義了一批C語言字元分類函數(C character classification functions),用於測試字元是否屬於特定的字元類別,如字母字元、控制字元等等。既支援單位元組字元,也支援寬字元。[1]
實現
現代的C庫中,字元分類函數一般不用比較測試(comparison tests)實現,而是靜態查表來實現。
例如,建立一個由256個8位元寬整陣列成的陣列,每個整數的每位對應字元的特定的分類性質,如屬於數字、屬於字母等等。如果最低位表示屬於數字性質,那麼可以寫成如下代碼:
#define isdigit(x) (TABLE[x] & 1)
早期版本的Linux使用了潛在犯錯的方法,類似於:
#define isdigit(x) ((x) >= '0' && (x) <= '9')
這會產生問題,如巨集參數x
具有副作用---例如,如果呼叫isdigit(x++)
或isdigit(run_some_program())
,可能不是很顯然,isdigit
的參數將被求值兩次。所以,查表的方法被廣泛使用。
函數
單位元組字元處理常式在ctype.h
(C++的cctype
)中聲明。寬位元組字元處理常式在wctype.h
(C++的cwctype
)中聲明.
單位元組 | 寬位元組 | 描述 |
---|---|---|
isalnum
|
iswalnum
|
是否為字母數字 |
isalpha
|
iswalpha
|
是否為字母 |
islower
|
iswlower
|
是否為小寫字母 |
isupper
|
iswupper
|
是否為大寫字母 |
isdigit
|
iswdigit
|
是否為數字 |
isxdigit
|
iswxdigit
|
是否為16進制數字 |
iscntrl
|
iswcntrl
|
是否為控制字元 |
isgraph
|
iswgraph
|
是否為圖形字元(例如,空格、控制字元都不是) |
isspace
|
iswspace
|
是否為空格字元(包括制表符、回車字元、換行符等) |
isblank
|
iswblank
|
是否為空白字元 (C99/C++11新增)(包括水平制表符) |
isprint
|
iswprint
|
是否為可列印字元 |
ispunct
|
iswpunct
|
是否為標點 |
tolower
|
towlower
|
轉換為小寫 |
toupper
|
towupper
|
轉換為大寫 |
不適用 | iswctype
|
檢查一個wchar_t 是否是屬於指定的分類
|
不適用 | towctrans
|
使用指定的變換對映來轉換一個wchar_t (實際上是大小寫的轉換)
|
不適用 | wctype
|
返回一個寬字元的類別,用於iswctype 函數
|
不適用 | wctrans
|
返回一個變換對映,用於 towctrans
|
參考文獻
- ^ ISO/IEC 9899:1999 specification (PDF). . p. 193, § 7.4 [2013-06-20]. (原始內容 (PDF)存檔於2011-01-24).
外部連結
維基教科書中的相關電子教學:C Character Class Test Library
維基教科書中的相關電子教學:C character classification