字符测试篇
本人原本无意写博客,不过由于某同龄女生的刺激,开了这个博客.本人很菜,不过贵在坚持.必然有不足之处,还请大家改正.
谈到字符就不的不说下计算机的识别问题。我们知道计算机仅仅只是能识别二进制。
比如一个能识别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 测试是否是可以打印的字符可以打印空格 还是不知道。
第一次写,写的不好是必然的。。。。。。。