简介:

头文件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做示范,看如何使用这些函数,输出结果就不贴出来了,分不清大小写的童鞋自觉面壁>_<

01	#include <stdlib.h>
02	#include <stdio.h>
03	#include <ctype.h>
04	 
05	int main ( int argc, char *argv[] )
06	{
07	    int c = 'a';
08	    int uc; 
09	 
10	    if( isalpha( c ) )
11	    {
12	        printf( "'%c' is an alphabet\n" ,c );
13	 
14	        if( islower( c ))
15	        {
16	            uc = toupper( c );
17	            printf( "uppercase: %c\n", uc );
18	        }
19	        else
20	        {
21	            uc = tolower( c );
22	            printf( "lowercase: %c\n", uc );
23	        }
24	    }
25	    else
26	    {
27	        printf( "'%c' is not an alphabet\n" ,c );
28	    }   
29	 
30	    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