ctype.h屬於c語言標準庫標頭檔案,提供了數字和字元的判別與大小寫轉化函式。
介面:判斷正確返回非零值,錯誤返回零
int
islower
(unsigned
char);
//是否為小寫字母。
intisupper
(char);
//是否為大寫字母。
intisalpha
(char);
//是否為字母。
intisdigit
(char);
//是否為數字。
intisxdigit
(char);
//是否為16進製制數。
intisalnum
(char);
//是否為數字字母,也就是數字,字母,數字和字母。
intispunct
(char);
//是否為標點符號。
intisgraph
(char);
//是否為除空格以外的,所有可列印出來的字元。
intisprint
(char);
//是否為包括空格的,所有可列印出來的字元。
intisspace
(char);
//是否為空格,換頁符,換行符,回車符,水平製表符,垂直製表符。
intiscntrl
(char);
//是否為控制字元。
inttolower
(char);
//轉換為小寫
inttoupper
(char);
//轉換為大寫
實現:
出於執行速度考慮,以上函式都是用巨集實現的。但標準庫中也提供的(function)形式的函式實現,很少用到。
#define islower(c) (_ctype[(int)(c)] & _lo)
#define isupper(c) (_ctype[(int)(c)] & _up)
#define isalpha(c) (_ctype[(int)(c)] & (_lo | _up | _xa))
#define isdigit(c) (_ctype[(int)(c)] & _di)
#define isxdigit(c) (_ctype[(int)(c)] & _xd)
#define isalnum(c) (_ctype[(int)(c)] & (_di | _lo | _up | _xa))
#define ispunct(c) (_ctype[(int)(c)] & _pu)
#define isgraph(c) (_ctype[(int)(c)] & (_dt | _lo | _pu | _up | xa))
#define isprint(c) (_ctype[(int)(c)] & (_di | _lo | _pu | _sp | _up | _xa))
#define isspace(c) (_ctype[(int)(c)] & (_cn | _sp | _xs))
#define iscntrl(c) (_ctype[(int)(c)] & (_bb | _cn))
#define tolower(c) _tolower[(int)(c)]
#define toupper(c) _toupper[(int)(c)]
下面對以上巨集定義進行分析:
_ctype _tolower _toupper 是三個short型指標,之所以是short,是因為其要操作的三個陣列皆為const short型。
這三個陣列也是實現這些巨集所定義的功能的關鍵。
在這之前,先給出輔助巨集的定義,輔助巨集的作用就是在通過位與運算得到函式結果值時提供「基準」。
#define _xa 0x200
//額外字母
#define _xs 0x100
//額外空格
#define _bb 0x80
//bel, bs,etc.
#define _cn 0x40
//cr, ff, ht, nl, vt
#define _di 0x20
//'0' - '9'
#define _lo 0x10
//'a' - 'z'
#define _pu 0x08
//符號
#define _sp 0x04
//空格
#define _up 0x02
//'a' - 'z'
#define _xd 0x01
//'0' - '9', 'a' - 'f', 'a' - 'f'
可以看到這些輔助巨集都是一些16進製制數。
而_ctype _tolower _toupper 這三個指標操作的陣列內容太大,具體可參見《c標準庫》p40~p42
_ctype陣列對應於asci碼的各個符號建立掩碼。
其中_ctype操作的陣列要注意由於eof的存在,所以_ctype從陣列第二位開始操作。
通過將引數c轉化為asci碼,並將其在_ctype操作的陣列的對應位置的掩碼與基準做位與運算即可得出結果。
結果為0,判斷錯誤。結果為非零,判斷正確。
_tolower和_toupper則比較簡單,將引數c轉化成asci碼後,直接從對方操作的陣列(_tolower操作的陣列與_toupper操作的陣列)中取得對應位置的值即可。在這兩個陣列中字母部分不是掩碼。而是,乙個是小寫字母,乙個是大寫字母。
ctype h標頭檔案
1 字元測試函式 1 函式原型均為int is x int 2 引數為int,任何 實參均被提公升成整型 3 只能正確處理處於 0,127 之間的值 2 字元對映函式 1 函式原型為int to x int 2 對引數進行檢測,若符合範圍則轉換,否則不變 int tolower int a z a ...
ctype h標頭檔案詳解
是乙個與字元處理有關的標頭檔案,它包含了一系列用於檢測和轉換單個字元的函式。中的函式都只有乙個引數,就是要檢測或者要轉換的字元,並且這個引數的型別是 int,它可以表示乙個有效字元,或者乙個eof 無效字元 中的函式的返回值也都是 int 型別,它可以表示乙個有效字元,或者乙個eof 無效字元 或者...
C 標頭檔案與C標頭檔案
include 設定插入點 include 字元處理 include 定義錯誤碼 include 浮點數處理 include 檔案輸入 輸出 include 引數化輸入 輸出 include 資料流輸入 輸出 include 定義各種資料型別最值常量 include 定義本地化函式 include ...