头文件ctype.h声明了一组用于分类和转换单个字符的函数。所有的函数都接收一个int型的参数,并返回一个int——返回的int可能代表一个字符,也可能代表的是bool值(0为假,非0为真)。
你可能会有疑问,既然是字符操作,接受的参数为什么不用char,而用int? Good question,答案我也不确定……O_O 好吧,我们继续……
因为这些“函数”太过常用,且调用频繁,所以为了提高效率,这些“函数”是由一些宏实现的,通过查看源文件可以很容易发现这一点。还有一点需要了解的是,如果修改了区域设置(默认为“C”区域设置),这些函数的行为可能会略有不同,不过不用担心,现在只需要知道有这么一个概念,后面介绍区域设置(locale.h)会再详细讨论。它们可以分为两组。一组用来判断字符是否属于某个分类,包括:
名称 | 签名 | 描述 |
---|---|---|
isalnum | int isalnum ( int c ); | 数字或字母 |
isalpha | int isalpha ( int c ); | 字母,或者那些实现定义的字符集中iscntrl,isdigit,ispunct,isspace判定都不为真的字符。在“C”区域设置里,isalpha只是isupper,islower返回真的字符 |
iscntrl | int iscntrl ( int c ); | 控制字符,与isprint相反,即不可打印字符 |
isdigit | int isdigit ( int c ); | 十进制数字字符 |
isgraph | int isgraph ( int c ); | 除空格(' ')以外的其他可打印(isprint为true)字符 |
islower | int islower ( int c ); | 小写字母 |
isprint | int isprint ( int c ); | 包括空格(' ')在内的打印字符 |
ispunct | int ispunct ( int c ); | 除空格(' ')和isalnum判定为真的字符以外的所有打印字符 |
isspace | int isspace ( int c ); | 空白字符 |
isupper | int isupper ( int c ); | 大写字母 |
isxdigit | int isxdigit ( int c ); | 16进制数字字符 |
另外一组用来转换大小写,包括:
名称 | 签名 | 描述 |
---|---|---|
toupper | int toupper ( int c ); | 转换c为大写 |
tolower | int tolower ( int c ); | 转换c为小写 |
下面拿isalpha,toupper/tolower做示范,看如何使用这些函数,输出结果就不贴出来了,分不清大小写的童鞋自觉面壁>_<
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
|
#include <stdlib.h> #include <stdio.h> #include <ctype.h> int main ( int argc, char *argv[] )
{ int c = 'a' ;
int uc;
if ( isalpha ( c ) )
{
printf ( "'%c' is an alphabet\n" ,c );
if ( islower ( c ))
{
uc = toupper ( c );
printf ( "uppercase: %c\n" , uc );
}
else
{
uc = tolower ( c );
printf ( "lowercase: %c\n" , uc );
}
}
else
{
printf ( "'%c' is not an alphabet\n" ,c );
}
return EXIT_SUCCESS;
} |
最后附一张默认的“C”区域设置下ASCII码对应的判定结果,可以帮助你对这些函数的判定结果有个直观的印象,enjoy it !
ASCII | 字符 | iscntrl | isspace | isupper | islower | isalpha | isdigit | isxdigit | isalnum | ispunct | isgraph | isprint |
---|---|---|---|---|---|---|---|---|---|---|---|---|
0x00 .. 0x08 | NUL, (其他控制字符) | x | ||||||||||
0x09 .. 0x0D | (空白字符代码: '\t','\f','\v','\n','\r') | x | x | |||||||||
0x0E .. 0x1F | (控制字符) | x | ||||||||||
0x20 | 空格 (' ') | x | x | |||||||||
0x21 .. 0x2F | !"#$%&'()*+,-./ | x | x | x | ||||||||
0x30 .. 0x39 | 01234567890 | x | x | x | x | x | ||||||
0x3a .. 0x40 | :;<=>?@ | x | x | x | ||||||||
0x41 .. 0x46 | ABCDEF | x | x | x | x | x | x | |||||
0x47 .. 0x5A | GHIJKLMNOPQRSTUVWXYZ | x | x | x | x | x | ||||||
0x5B .. 0x60 | [\]^_` | x | x | x | ||||||||
0x61 .. 0x66 | abcdef | x | x | x | x | x | x | |||||
0x67 .. 0x7A | ghijklmnopqrstuvwxyz | x | x | x | x | x | ||||||
0x7B .. 0x7E | {|}~ | x | x | x | ||||||||
0x7F | (DEL) | x |
首发自:http://yaohuiji.com/
欢迎转载和探讨学习,但转载时必须保留本文的署名Jack Yao及链接,未经许可请勿商业使用。