複製鏈接
請複製以下鏈接發送給好友

ctype.h

鎖定
ctype.hC標準函數庫中的頭文件,定義了一批C語言字符分類函數(C character classification functions),用於測試字符是否屬於特定的字符類別,如字母字符、控制字符等等。既支持單字節字符,也支持寬字符
外文名
ctype.h
字符類別
字母字符、控制字符
支持類別
字節字符,寬字符

目錄

ctype.h實現

現代的C庫中,字符分類函數一般不用比較測試(comparison tests)實現,而是靜態查表來實現 [1] 
例如,創建一個由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函數

單字節字符處理函數在ctype.h(C++的cctype)中聲明。寬字節字符處理函數在wctype.h(C++的cwctype)中聲明.
單字節
寬字節
描述
iswalnum
是否為字母數字
iswalpha
是否為字母
iswlower
是否為小寫字母
iswupper
是否為大寫字母
iswdigit
是否為數字
iswxdigit
是否為16進制數字
iswcntrl
是否為控制字符
iswgraph
是否為圖形字符(例如,空格、控制字符都不是)
iswspace
是否為空格字符(包括製表符、回車符、換行符等)
isblank
iswblank
是否為空白字符(C99/C++11新增)(包括水平製表符)
iswprint
是否為可打印字符
iswpunct
是否為標點
towlower
轉換為小寫
towupper
轉換為大寫
不適用
iswctype
檢查一個wchar_t是否是屬於指定的分類
不適用
towctrans
使用指定的變換映射來轉換一個wchar_t(實際上是大小寫的轉換)
不適用
wctype
返回一個寬字符的類別,用於iswctype函數
不適用
wctrans
返回一個變換映射,用於towctrans

ctype.h字符類

序號
字符類 & 描述
1
數字
完整的數字集合 { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }
2
十六進制數字
集合 { 0 1 2 3 4 5 6 7 8 9 A B C D E F a b c d e f }
3
小寫字母
集合 { a b c d e f g h i j k l m n o p q r s t u v w x y z }
4
大寫字母
集合 {A B C D E F G H I J K L M N O P Q R S T U V W X Y Z }
5
字母
小寫字母和大寫字母的集合
6
字母數字字符
數字、小寫字母和大寫字母的集合
7
標點符號字符
集合 ! " # $ % & ' ( ) * + , - . / : ; < = > ? @ [ \ ] ^ _ ` { | } ~
8
圖形字符
字母數字字符和標點符號字符的集合
9
空格字符
製表符、換行符、垂直製表符、換頁符、回車符、空格符的集合。
10
控制字符
在 ASCII 編碼中,這些字符的八進制代碼是從 000 到 037,以及 177(DEL)。
11
空白字符
包括空格符和製表符。
參考資料
  • 1.    Josuttis N M . C++標準庫[M]. 電子工業出版社, 2015.