ctype.h

本文介绍了C语言中的ctype.h头文件,它包含了一系列用于字符处理的函数和宏,主要用于ASCII字符集。文章详细讲解了ctype.h中的转换表和宏定义,以及如何利用位运算进行字符类型的判断,同时探讨了如何避免宏展开导致的问题。
摘要由CSDN通过智能技术生成

字符处理从C语言发展的早期开始就非常重要。要知道,C程序趋向于短小而且单一功能的编写。我们用的最多的执行字符集当然是ASCII(American Standard Code for Information Interchange),这是使用非常广泛的字符编码,但不是所有计算机体系结构都是用它。比如IMB就用EBCDIC而不是ASCII。
在我们日常编写代码的时候可能会非常频繁地使用字符判断函数,如果自己写的话,又比较麻烦,而且说实话效率和安全性都不太高。经过多年的积累,C标准库纳入了关于字符处理、判断的头文件ctype.h。一个典型的文本处理程序对输入流中的每个字符会平均调用ctype.h里的函数3次。如果用函数来实现的话,对于如此频繁的调用,开销是非常巨大的。所以一些值得称赞的程序员开发了宏来替代这些函数。说道ctype.h里的宏就不得不说到几个典型的转换表的宏集合。转换表和字符类型建立起对应的映射关系。这是典型的用空间换时间的做法,把标准的字符集合先行存入一个静态转换表中,节省了时间。但是要注意,这只适用于字符集合元素不是太多的情况。比如ASCII用7位或者8位表示一个字符类型。这样的话,字符集合元素最多也才256个。但是有的甚至用32位表示字符类型,这样的话,字符集合元素最多可以有65536个。这个要是用转换表的就有点难受了。
关于ctype.h头文件:

#ifndef MY_CTYPE_H  /**保护宏*/
#define MY_CTYPE_H

#define _XA 0x200   /**额外的字母, 0x200 == 2^9*/
#define _XS 0x100   /**额外的空格, 0x100 == 2^8*/
#define _BB 0x80    /**警报符BEL, 退格符BS, etc., 0x80 == 2^7*/
#define _CN 0x40    /**5个运动控制字符CR,FF,HT,NL,NT, x040 == 2^6*/
#define _DI 0x20    /**十进制字符'0'-'9', 0x20 == 2^5*/
#define _LO 0x10    /**小写字母字符'a'-'z', 0x10 == 2^4*/
#define _PU 0x08    /**标点字符, 0x08 == 2^3*/
#define _SP 0x04    /**空格, 0x04 == 2^2*/
#define _UP 0x02    /**大写字母'A'-'Z', 0x02 == 2^1*/
#define _XD 0x01    /**十六进制字符, 0x02 == 2^0*/
    /**函数声明*/
int isalnum(int), isalpha(int), iscntrl(int), isdigit(int);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值