本来今天是计划要写进制转换的,但是博主又突然发现另一个比较好玩的东西,所以果断决定先来这个;
相信大家或多或少都用过ctype.h (标准c)/ cctype(c++)这个库中的函数:
#define U 0x01 //写字母
#define L 0x02 //小写字母
#define D 0x04 //数字
#define C 0x08 //控制字符
#define P 0x10 //可打印字符
#define S 0x20 //空格符/跳格符(控制字符)/换行符
#define X 0x40 //16进制基数32
#define SP 0x80 //空格
extern unsigned char ctype[];
extern char ctmp;
unsigned char ctype[] = {0, /* EOF */
C, C, C, C, C, C, C, C, /* 0-7 */
C, C| S, C| S, C| S, C| S, C| S, C, C, /* 8-15 */
C, C, C, C, C, C, C, C, /* 16-23 */
C, C, C, C, C, C, C, C, /* 24-31 */
S| SP, P, P, P, P, P, P, P, /* 32-39 */
P, P, P, P, P, P, P, P, /* 40-47 */
D, D, D, D, D, D, D, D, /* 48-55 */
D, D, P, P, P, P, P, P, /* 56-63 */
P, U| X, U| X, U| X, U| X, U| X, U| X, U, /* 64-71 */
U, U, U, U, U, U, U, U, /* 72-79 */
U, U, U, U, U, U, U, U, /* 80-87 */
U, U, U, P, P, P, P, P, /* 88-95 */
P, L| X, L| X, L| X, L| X, L| X, L| X, L, /* 96-103 */
L, L, L, L, L, L, L, L, /* 104-111 */
L, L, L, L, L, L, L, L, /* 112-119 */
L, L, L, P, P, P, P, C, /* 120-127 */
//剩下的都初始化为零;
}
字数原因,只在这里贴了两个,其他的都是同一个思想,以此类推就好。int isupper(int c){ return _ctype[c] & U;
}
int toupper(int c){ if (_ctype[c] & L) return c - ('a' - 'A');else return c; }
int isupper(int ch)
{
if (ch >=65 && ch <= 90)
return 1;
else
return 0;
}
不知道都多少人跟我之前的想法一样 哈哈.....char toupper(int ch){if (ch >=97 && ch <= 122)return (ch - 32);elsereturn ch;}