ctype.h(二)

补充一些细节,以及使用ctype.h里面的函数(准确的说是宏)的注意事项。
补充一点关于#error的问题,在上一节中,转换表中有写到#error,这个东西大概是这样的:

#include <stdio.h>
//#define BENBEN
#ifndef BEBEN
    #error There is no BENBEN
#else
    #define QWE 123
#endif

int main()
{
    printf("Hello World\n");
    return 0;
}

去掉第二行的注释程序就能正常运行了,不然在编译时就会报错。并且输出There is no BENBEN(注意是编译器输出信息,不是运行生成的可执行文件,编译都没有通过怎么会有目标文件,更不会有可执行文件),并且编译完这句就不会往下继续编译,当即停止。当然你也可以不写这一句,但是就没有任何的提示信息了。

(一)字符判断函数:
以下提到的函数当且仅当参数c的值和函数描述中的一致时才返回非0(真).

#include <ctype.h>
int isalnum(int c);

注意参数的类型是int,但是这个我们可以不用太在乎,因为我们判断的是字符,signed char 和unsigned char类型提升为int是没问题的,并不会出现有效值丢失的问题。看函数的名字,顾名思义,判断是不是字母或者数字。因为这里的函数名是没有加括号的,实际上我们使用的是宏。宏表达式的值为非0,就为真,为0,就为假。注意一点,isalnum判别所有isalpha或者isdigit判别为真的字符为真。

#include <ctype.h>
int isalpha(int c);

isalpha判别所有isupper或者islower判别为真的字符为真。

#include <ctype.h>
int iscntrl(int c);

iscntrl判别所有的控制字符。

#include <ctype.h>
int isdigit(int c);

isdigit判别所有的十进制数字字符,也就是’0’ ~ ‘9’.有如下简洁地将字符串的数字字符转换成整数的代码:

for (value = 0; isdigit(*s); ++s)
    value = value * 10 + (*s - '0');

不过这里并没有添加溢出检查,当字符串的数字字符足够长的时候就有可能溢出int,甚至是long long(64位整数)的范围。

#include <isgraph>
int isgraph(int c);

isgraph判别所有能显示的打印字符,也就是说判别除空格(’ ‘)之外的所有打印字符。

#include <ctype.h>
int islower(int c);

islower判别所有的小写字母。

#include <ctype.h>
int isprint(int c);

isprint判别包括空格(’ ‘)在内的所有打印字符。

#include <ctype.h>
int ispunct(int c);

ispunct判别除空格(’ ‘)和isalnum判别为真的字符之外的所有打印字符。也就是所谓的标点字符。

#include <ctype.h>
int isspace(int c);

isspace判别所有标准的空白字符,标准空白字符有:空格(’ ‘)、换页(’\f’)、换行(’\n’)、回车(’\r’)、水平制表符(’\t’)和垂直制表符(’\v’)。

#include <ctype.h>
int isupper(int c);

判别所有的大写字母。

#include <ctype.h>
int isxdigit(int c);

isxdigit判别所有十六进制数字的字符。类似的可以像十进制数字字符那样转换:

#include <ctype.h>
#include <string.h>
static const char xd[] = 
    {"0123456789ABCDEFabcdef"};
static const char xv[] =
    {0, 1, 2, 3, 4, 5, 6, 7, 8, 9,
    10, 11, 12, 13, 14, 15,
    10, 11, 12, 13, 14, 15};
for (value = 0; isxdigit(*s); ++s)
    value = (value << 4) + xv[strchr(xd, *s) - xd];

这里利用了映射关系,知道字符在xd数组的位置就知道它的值。注意value << 4,表示右移4位,也就是乘16.strchr(xd, *s)返回*s在xd中的位置(返回的是一个指针)。

(二)字符大小写转换函数:

#include <ctype.h>
int tolower(int c);

把一个大写字母转换为小写字母。如果c不是大写字母,那么返回c的原来值。

#include <ctype.h>
int toupper(int c);

把一个小写字母转换为大写字母。如果c不是小写字母,那么就返回c的原来值。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值