字元測試篇
本人原本無意寫部落格,不過由於某同齡女生的刺激,開了這個部落格.本人很菜,不過貴在堅持.必然有不足之處,還請大家改正.
談到字元就不的不說下電腦的識別問題。我們知道電腦僅僅只是能識別二進位。
比如一個能識別32位的系統,代表什麼意思呢,能得到什麼樣的資訊?在電腦群組成原理裡面對著個討論的比較多。它代表電腦的CPU一次能處理32位。即系統的地址匯流排是32根,說的再通俗點就是CPU插著32根電線,每根電線都能表示1或0.那麼在機率上有多少種相片順序呢?就是2的32次種排列。那麼著又代表著什麼呢?
那麼這裡就又不得不談到單位問題了。
1K = 1024bit
1M = 1024K
1G = 1024M
那麼2的32次就 = 4G 這個東西就是32記憶體的大小了。至於為什麼那就簡單了,你想想CPU肯定是訪問記憶體的(當然這裡還有cache不過暫時不討論)那麼CPU能最大訪問多少的記憶體空間呢?就是4G了,CPU最大隻能訪問4G那麼你記憶體沒理由比這個還大把(其實記憶體就是根據32根地址線來造的),再大CPU都訪問不了了哪有什麼用。
偏題有點遠了。一個32位分成4份,每份8位,叫一個位元組1byte = 8bit.至於為什麼這樣分呢?我認為這是為了滿足鍵盤上的字元,譚浩強上的書寫著前127是標準字元,後面的是IBM用的。管它的什麼東西,子要知道8位可以表示任何的字元。少了不夠,多了浪費.再者因為電腦天生只有2根手指頭,必須是2個指數。於是乎就8位一個位元組了。因為8位二進位是給機器看的,人看的太累了,於是就用ASCII來表示8位,就產生了字元。。。。。。。。
撤了這麼多現在才開始真正的代碼不過都很簡單的~ _ ~
首先大家應該要知道在C中字元測試的函數其實是宏函數。就是通過宏來定義的
都要通過#include <ctype.h>標頭檔
1 isdigit 這個是測試是否是數字
#define isdigit(ch) ((ch) > '0' && (ch) < '9')
2 islower 這個是測試是否是小寫字母
#define islower(ch) ((ch) > 'a' && (ch) < 'z')
3 isupper 測試是否是大寫字母
#define isupper(ch) ((ch) > 'A' && (ch) < 'Z')
4 isAlpha 測試是否是字母
#define isalpha(ch) (isupper(ch) || islower(ch))
5 isalnum 測試是否是數字或字母
#define isalnum(ch) (isdigit(ch) || isalpha(ch))
6 isascii 測試是否是0到127之間的字元
#define isascii(ch) ((ch) > 0 && (ch) < 128)
7 iscntrl 測試是否是0到30之間的字元
#define iscntrl(ch) ((ch) > 0 && (ch) < 31)
8 isspace 測試是否為空白格字元(空白字元包括' ' ,'\t' ,'\r' ,'\n','\v','\f')暈我也才看到
#define isspace(ch) ((ch) == '\t' || (ch) == ' ' || (ch) == '\r' || (ch) == '\n' || (ch) == '\v' || (ch) == '\f')
9 ispunct 測試是否是標點符號或特殊符號,就是非空格,非數字,非英文
#define ispunct(ch) (!isspace(ch) && !isdigit(ch) && !isalpha(ch))
10 isxdigit 測試是否是16進位數
#define ispunct(ch) (isdigit(ch) || ((ch) >= 'a' && <= 'f') || ((ch) >= 'A' && (ch) <= 'F'))
11 isgraphis 測試是否是可以列印的字元且非空白字元。我悶了,還真不知道。如果有誰知道告訴我下
12 isprint 測試是否是可以列印的字元可以列印空格 還是不知道。
第一次寫,寫的不好是必然的。。。。。。。