编程珠玑 第九章 第六题 (isdigit \ isupper\islower)的实现

本文探讨了宏定义和HASH表在字符类型判断中的实现方式,包括使用宏定义进行简单字符属性判断,以及通过HASH表利用位运算进行更复杂的字符分类。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这个实现主要有两种方法,一种是利用宏定义,一种是利用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))



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值