这个实现主要有两种方法,一种是利用宏定义,一种是利用HASH表,宏定义需要判断,其实效率都差不多,HASH主要是利用了位运算
#include<stdio.h>
#include<string.h>
/*
*method No_1, macro definition
*/
#define isdigit(x) ((x)>='0' && (x)<='9')
#define isupper(x) ((x)>='A' && (x) <= 'Z')
#define islower(x) ((x)>= 'a' && (x) <= 'z')
#define isalph(x) ((x)>='A' && (x)<='z')
#define isalphnum(x) (((x)>='A'&&(x)<='z') || ((x)>='0' && (x) <='9'))
/*
*method No_2 hash
*/
#define ORD_CHR 0
#define LOWER 1
#define UPPER 2
#define DIGIT 4
unsigned char hash_table[256];
void pre_process(void)
{
memset(hash_table,0,sizeof(hash_table));
int i;
for(i = 'A';i<='Z';i++)
hash_table[i] |=UPPER;
for(i = 'a';i<='z';i++)
hash_table[i] |=LOWER;
for(i = '0';i<='9';i++)
hash_table[i] |=DIGIT;
/*
* and others , blank ...etc
*/
}
#define isdigit(x) (hash_table[x] & DIGIT)
#define isupper(x) (hash_table[x] & UPPER)
#define islower(x) (hash_table[x] & LOWER)
#define isalph(x) (hash_table[x] & (LOWER | UPPER))
#define isalphnum(x) (hash_table[x] & (LOWER | UPPER | DIGIT))