minix中關於如何判定乙個字元的型別,如大寫、小寫、數字……
如果採用傳統的方法,如判斷乙個字母大寫的方法:
if(c>='但是如果判斷乙個字元是數字或是字母,則採用下面的**:a' && c
z') return
true;
if((c如果假設更多的侷限,效率明顯下降z' && c>'
a') || (c
z' && c>'
a') || (c>'
0' && c
9')) return
true
minix的做法是定義乙個256元素的
unsigned char _ctypes
陣列,由於8位需要8種屬性分別描述,如下:
#define _u 0x01 /* this bit is for upper-case letters [a-z] */判斷字元函式原型:#define _l 0x02 /* this bit is for lower-case letters [a-z] */
#define _n 0x04 /* this bit is for numbers [0-9] */
#define _s 0x08 /* this bit is for white space \t \n \f etc */
#define _p 0x10 /* this bit is for punctuation characters */
#define _c 0x20 /* this bit is for control characters */
#define _x 0x40 /* this bit is for hex digits [a-f] and [a-f]*/#define _prototype(function, params) function params
_prototype( int isalnum, (int _c) ); /*以上函式都是通過巨集定義:alphanumeric [a-z], [a-z], [0-9]
*/_prototype(
int isalpha, (int _c) ); /*
alphabetic
*/_prototype(
int iscntrl, (int _c) ); /*
control characters
*/_prototype(
int isdigit, (int _c) ); /*
digit [0-9]
*/_prototype(
int isgraph, (int _c) ); /*
graphic character
*/_prototype(
int islower, (int _c) ); /*
lower-case letter [a-z]
*/_prototype(
int isprint, (int _c) ); /*
printable character
*/_prototype(
int ispunct, (int _c) ); /*
punctuation mark
*/_prototype(
int isspace, (int _c) ); /*
white space sp, \f, \n, \r, \t, \v
*/_prototype(
int isupper, (int _c) ); /*
upper-case letter [a-z]
*/_prototype(
int isxdigit,(int _c) ); /*
hex digit [0-9], [a-f], [a-f]
*/_prototype(
int tolower, (int _c) ); /*
convert to lower-case
*/_prototype(
int toupper, (int _c) ); /*
convert to upper-case
*/
#define isalnum(c) ((__ctype+1)[c]&(_u|_l|_n))minix將_ctype初始化為:#define isalpha(c) ((__ctype+1)[c]&(_u|_l))
#define iscntrl(c) ((__ctype+1)[c]&_c)
#define isgraph(c) ((__ctype+1)[c]&(_p|_u|_l|_n))
#define ispunct(c) ((__ctype+1)[c]&_p)
#define isspace(c) ((__ctype+1)[c]&_s)
#define isxdigit(c) ((__ctype+1)[c]&(_n|_x))
#define isdigit(c) ((unsigned) ((c)-'0') < 10)
#define islower(c) ((unsigned) ((c)-'a') < 26)
#define isupper(c) ((unsigned) ((c)-'a') < 26)
#define isprint(c) ((unsigned) ((c)-' ') < 95)
#define isascii(c) ((unsigned) (c) < 128)
char __ctype =;c**
minix中atoi atol atof的實現
在minix2.0源 中,有將字串型別轉換為int long double型別的函式實現,相關的實現函式分別在atoi.c atol.c atof.c檔案中,我們來逐一學習其中的原始碼 int atoi register const char nptr while isdigit nptr retu...
minix中時間轉換的實現(asctime c)
在minix2.0源 中,有相當經典的時間轉換函式實現 src src lib ansi asctime.c 今天我們就來分析一下asctime.c中的原始碼 首先引入幾個相關的標頭檔案 1 time.h 主要的結構體與相關定義 struct tm char asctime const struct...
關於PHP中變數的判定
由於php解釋性語言,所以乙個變數即使沒有定義也可以被使用而不會引起error。請看下面這個例子 輸出的結果是 empty no set null no defined case 0 有其實最後乙個switch判斷,這是乙個比較隱晦的錯誤,所以在使用前進行一次判斷還是有意義的。同時我們可以看到有些的...