6.5.3 字符函数库

字符函数库提供了对单个字符的判断和转换函数。字符函数库的原型声明包含在头文件CTYPE.H中,字符函数库的函数如表6.8所示。下面分别介绍一些常用的字符函数。

6.5.3 字符函数库 - 图1

1.检查英文字母函数isalpha

检查英文字母函数isalpha的函数原型如下。


bit isalpha(char c);


其中,c为待判断的字符,如果是英文字母则返回1,否则返回0。检查英文字母函数isalpha用于检查形参字符是否为英文字母。程序示例如下。


include<ctype.h>//头文件

include<stdio.h>

include<reg51.h>

void main(void)//主函数

{

unsigned char i;//变量声明

bit b;

char*p;

//初始化串口

for(i=0;i<128;i++)//循环输出

{

b=isalpha(i);//调用isalpha函数

if(b)

p=“YES”;

else

p=“No”;

printf(“isalpha(%c)=%s\n”,i,p);//输出结果

}

}


该程序可以在KeilµVision3编译环境中执行。在程序中循环调用isalpha函数来判断128个字符对应的是否为英文字母,如果是则输出Yes,否则输出No,运行的结果将通过串口输出。

2.检查字母数字函数isalnum

检查字母数字函数isalnum的函数原型如下。


bit isalnum(char c);


其中,c为待判断的字符,如果是英文字母或数字字符则返回1,否则返回0。检查字母数字函数isalnum用于检查形参字符是否为英文字母或数字字符。程序示例如下。


include<ctype.h>//头文件

include<stdio.h>

include<reg51.h>

void main(void)//主函数

{

unsigned char i;//变量声明

bit b;

char*p;

//初始化串口

for(i=0;i<128;i++)//循环输出

{

b=isalnum(i);//调用isalnum函数

if(b)

p=“YES”;

else

p=“No”;

printf(“isalnum(%c)=%s\n”,i,p);//输出结果

}

}


该程序可以在KeilµVision3编译环境中执行。在程序中循环调用isalnum函数来判断128个字符对应的是否为英文字母或者数字,如果是则输出Yes,否则输出No,运行的结果将通过串口输出。

3.检查控制字符函数iscntrl

检查控制字符函数iscntrl的函数原型如下。


bit iscntrl(char c);


其中,c为待判断的字符。检查控制字符函数iscntrl用于检查形参字符是否为控制字符。控制字符其取值范围在0x00~0xlF或等于0x7F,如果是则返回1,否则返回0。程序示例如下。


include<ctype.h>//头文件

include<stdio.h>

include<reg51.h>

void main(void)//主函数

{

unsigned char i;//变量声明

bit b;

char*p;

//初始化串口

for(i=0;i<128;i++)//循环输出

{

b=iscntrl(i);//调用iscntrl函数

if(b)

p=“YES”;

else

p=“No”;

printf(“iscntrl(%c)=%s\n”,i,p);//输出结果

}

}


该程序可以在KeilµVision3编译环境中执行。在程序中循环调用iscntrl函数来判断128个字符对应的是否为控制字符,如果是则输出Yes,否则输出No,运行的结果将通过串口输出。

4.十进制数字检查函数isdigit

十进制数字检查函数isdigit的函数原型如下。


bit isdigit(char c);


其中,c为待判断的字符。十进制数字检查函数isdigit用于检查形参字符是否为十进制数字,如果是十进制数字则返回1,否则返回0。程序示例如下。


include<ctype.h>//头文件

include<stdio.h>

include<reg51.h>

void main(void)//主函数

{

unsigned char i;//变量声明

bit b;

char*p;

//初始化串口

for(i=0;i<128;i++)//循环输出

{

b=isdigit(i);//调用isdigit函数

if(b)

p=“YES”;

else

p=“No”;

printf(“isdigit(%c)=%s\n”,i,p);//输出结果

}

}


该程序可以在KeilµVision3编译环境中执行。在程序中循环调用isdigit函数来判断128个字符对应的是否为十进制数字,如果是则输出Yes,否则输出No,运行的结果将通过串口输出。

5.可打印字符检查函数isgraph

可打印字符检查函数isgraph的函数原型如下。


bit isgraph(char c);


其中,c为待判断的字符。可打印字符检查函数isgraph用于检查形参字符是否为可打印字符,可打印字符的取值范围为0x21~0x7C,不包含空格,如果是可打印字符则返回1,否则返回0。程序示例如下。


include<ctype.h>//头文件

include<stdio.h>

include<reg51.h>

void main(void)//主函数

{

unsigned char i;//变量声明

bit b;

char*p;

//初始化串口

for(i=0;i<128;i++)//循环输出

{

b=isgraph(i);//调用isgraph函数

if(b)

p=“YES”;

else

p=“No”;

printf(“isgraph(%c)=%s\n”,i,p);//输出结果

}

}


该程序可以在KeilµVision3编译环境中执行。在程序中循环调用isgraph函数来判断128个字符对应的是否为可打印字符,如果是则输出Yes,否则输出No,运行的结果将通过串口输出。

6.包含空格的可打印字符检查函数isprint

包含空格的可打印字符检查函数isprint的函数原型如下。


bit isprint(char c);


其中,c为待判断字符。包含空格的可打印字符检查函数isprint用于检查形参字符是否为可打印字符以及空格,如果是则返回1,否则返回0。该函数与isgraph的区别在于包含了空格符,空格符为0x20。程序示例如下。


include<ctype.h>//头文件

include<stdio.h>

include<reg51.h>

void main(void)//主函数

{

unsigned char i;//变量声明

bit b;

char*p;

//初始化串口

for(i=0;i<128;i++)//循环输出

{

b=isprint(i);//调用isprint函数

if(b)

p=“YES”;

else

p=“No”;

printf(“isprint(%c)=%s\n”,i,p);//输出结果

}

}


该程序可以在KeilµVision3编译环境中执行。在程序中循环调用isprint函数来判断128个字符对应的是否为包含空格的可打印字符,如果是则输出Yes,否则输出No,运行的结果将通过串口输出。

7.格式字符检查函数ispunct

格式字符检查函数ispunct的函数原型如下。


bit ispunct(char c);


其中,c为待判断字符。格式字符检查函数ispunct用于检查形参字符是否为标点、空格或格式字符,如果是则返回1,否则返回0。符合ispunct的字符包含!、"、#、%、&、'、(、)、*、+、-、,、.、/、\、;、:、<、=、>、?、@、[、]、~、^、_、{、}、|。程序示例如下。


include<ctype.h>//头文件

include<stdio.h>

include<reg51.h>

void main(void)//主函数

{

unsigned char i;//变量声明

bit b;

char*p;

//初始化串口

for(i=0;i<128;i++)//循环输出

{

b=ispunct(i);//调用ispunct函数

if(b)

p=“YES”;

else

p=“No”;

printf(“ispunct(%c)=%s\n”,i,p);//输出结果

}

}


该程序可以在KeilµVision3编译环境中执行。在程序中循环调用ispunct函数来判断128个字符对应的是否为标点、空格或格式字符,如果是则输出Yes,否则输出No,运行的结果将通过串口输出。

8.小写英文字母检查函数islower

小写英文字母检查函数islower的函数原型如下。


bit islower(char c);


其中,c为待判断字符。小写英文字母检查函数islower用于检查形参字符是否为小写英文字母,如果是小写英文字母则返回1,否则返回0。程序示例如下。


include<ctype.h>//头文件

include<stdio.h>

include<reg51.h>

void main(void)//主函数

{

unsigned char i;//变量声明

bit b;

char*p;

//初始化串口

for(i=0;i<128;i++)//循环输出

{

b=islower(i);//调用islower函数

if(b)

p=“YES”;

else

p=“No”;

printf(“islower(%c)=%s\n”,i,p);//输出结果

}

}


该程序可以在KeilµVision3编译环境中执行。在程序中循环调用islower函数来判断128个字符对应的是否为小写英文字母,如果是则输出Yes,否则输出No,运行的结果将通过串口输出。

9.大写英文字母检查函数isupper

大写英文字母检查函数isupper的函数原型如下。


bit isupper(char c);


其中,c为待判断字符。大写英文字母检查函数isupper用于检查形参字符是否为大写英文字母,如果是大写英文字母则返回1,否则返回0。程序示例如下。


include<ctype.h>//头文件

include<stdio.h>

include<reg51.h>

void main(void)//主函数

{

unsigned char i;//变量声明

bit b;

char*p;

//初始化串口

for(i=0;i<128;i++)//循环输出

{

b=(isupper(i);//调用isupper函数

if(b)

p=“YES”;

else

p=“No”;

printf(“isupper(%c)=%s\n”,i,p);//输出结果

}

}


该程序可以在KeilµVision3编译环境中执行。在程序中循环调用isupper函数来判断128个字符对应的是否为大写英文字母,如果是则输出Yes,否则输出No,运行的结果将通过串口输出。

10.控制字符检查函数isspace

控制字符检查函数isspace的函数原型如下。


bit isspace(char c);


其中,c为待判断字符。控制字符检查函数isspace用于检查形参字符是否为控制字符,如果是控制字符则返回1,否则返回0。控制字符包括空格、制表符、回车、换行、垂直制表符和送纸,其取值范围为0x09~0x0d或为0x20。程序示例如下。


include<ctype.h>//头文件

include<stdio.h>

include<reg51.h>

void main(void)//主函数

{

unsigned char i;//变量声明

bit b;

char*p;

//初始化串口

for(i=0;i<128;i++)//循环输出

{

b=isspace(i);//调用isspace函数

if(b)

p=“YES”;

else

p=“No”;

printf(“isspace(%c)=%s\n”,i,p);//输出结果

}

}


该程序可以在KeilµVision3编译环境中执行。在程序中循环调用isspace函数来判断128个字符对应的是否为控制字符,如果是则输出Yes,否则输出No,运行的结果将通过串口输出。

11.十六进制数字检查函数isxdigit

十六进制数字检查函数isxdigit的函数原型如下。


bit isxdigit(char c);


其中,c为待判断字符。十六进制数字检查函数isxdigit用于检查形参字符是否为十六进制数字,如果是十六进制数字字符则返回1,否则返回0。程序示例如下。


include<ctype.h>//头文件

include<stdio.h>

include<reg51.h>

void main(void)//主函数

unsigned char i;//变量声明

{

bit b;

char*p;

//初始化串口

for(i=0;i<128;i++)//循环输出

{

b=isxdigit(i);//调用isxdigit函数

if(b)

p=“YES”;

else

p=“No”;

printf(“isxdigit(%c)=%s\n”,i,p);//输出结果

}

}


该程序可以在KeilµVision3编译环境中执行。在程序中循环调用isxdigit函数来判断128个字符对应的是否为十六进制数字字符,如果是则输出Yes,否则输出No,运行的结果将通过串口输出。

12.十六进制数字转换函数toint

十六进制数字转换函数toint的函数原型如下。


char toint(char c);


其中,c为待转换字符。十六进制数字检查函数toint用于转换形参字符0~9、a~f(大小写无关)为十六进制数字。其中,对于字符0~9,返回值为0H~9H,对于ASCII字符a~f(大小写无关),返回值为0AH~0FH。程序示例如下。


include<ctype.h>//头文件

include<stdio.h>

include<reg51.h>

void main(void)//主函数

{

char ch;//变量声明

unsigned long k;

//初始化串口

ch=‘7’;//字符变量赋值

k=toint(ch);//调用函数

printf(“toint(%c)=%ld\n”,ch,k);//输出结果

ch=‘d’;//字符变量赋值

k=toint(ch);//调用函数

printf(“toint(%c)=%ld\n”,ch,k);//输出结果

}


该程序可以在KeilµVision3编译环境中执行,运行的结果如下。


toint(7)=7

toint(d)=13


在该程序中,分别为字符变量ch赋值,然后调用toint函数将字符转换为十六进制数字,运行的结果将通过串口输出。

13.大写字符转换函数tolower

大写字符转换函数tolower的函数原型如下。


char tolower(char c);


其中,c为待转换的大写字符。大写字符转换函数tolower用于将大写字符转换为小写字符,如果字符参数不在A~Z之间,则该函数将不起作用,而直接返回原字符。程序示例如下。


include<ctype.h>//头文件

include<stdio.h>

include<reg51.h>

void main(void)//主函数

{

char ch;//变量声明

char ch_lower;

//初始化串口

ch=‘R’;//赋大写字符

ch_lower=tolower(ch);//调用函数

printf(“tolower(%c)=%c\n”,ch,ch_lower);//输出结果

ch=‘t’;//赋小写字符

ch_lower=tolower(ch);//调用函数

printf(“tolower(%c)=%c\n”,ch,ch_lower);//输出结果

}


该程序可以在KeilµVision3编译环境中执行,运行的结果如下。


tolower(R)=r

tolower(t)=t


在该程序中,分别为字符变量ch赋值,然后调用tolower函数将大写字符转换为小写字符,运行的结果将通过串口输出。

14.小写字符转换函数toupper

小写字符转换函数toupper的函数原型如下。


char toupper(char c);


其中,c为待转换的小写字符。小写字符转换函数toupper用于将小写字符转换为大写字符,如果字符参数不在a~z之间,则该函数将不起作用,而直接返回原字符。程序示例如下。


include<ctype.h>//头文件

include<stdio.h>

include<reg51.h>

void main(void)//主函数

{

char ch;//变量声明

char ch_upper;

//初始化串口

ch=‘r’;//赋小写字符

ch_upper=toupper(ch);//调用函数

printf(“toupper(%c)=%c\n”,ch,ch_upper);//输出结果

ch=‘Q’;//赋大写字符

ch_upper=toupper(ch);//调用函数

printf(“toupper(%c)=%c\n”,ch,ch_upper);//输出结果

}


该程序可以在KeilµVision3编译环境中执行,运行的结果如下。


toupper(r)=R

toupper(Q)=Q


在该程序中,分别为字符变量ch赋值,然后调用toupper函数将小写字符转换为大写字符,运行的结果将通过串口输出。

15.ASCII字符转换函数toascii

ASCII字符转换函数toascii的函数原型如下。


char toascii(char c);


其中,c为待转换的字符。ASCII字符转换函数toascii用于将任何字符型参数缩小到有效的ASCII范围之内。该函数执行的操作是将形参数值和0x7f做与运算,从而去掉第7位以上的所有位数。如果形参已是有效的ASCII字符,则不作处理,直接返回原字符。程序示例如下。


include<ctype.h>//头文件

include<stdio.h>

include<reg51.h>

void main(void)//主函数

{

int ch;//变量声明

char k;

//初始化串口

ch=246;//字符变量赋值

k=toascii(ch);//调用函数

printf(“toascii(%d)=%c\n”,ch,k);//输出结果

}


该程序可以在KeilµVision3编译环境中执行,运行的结果如下。


toascii(246)=v


在该程序中,由于字符型变量可以表示为整型,因此变量ch赋值,然后调用toascii函数将其转换为有效的ASCII字符,最后使用printf函数输出转换结果。

16.大写字符宏转换函数_tolower

大写字符宏转换函数_tolower的函数原型如下。


char_tolower(char c);


其中,c为待转换的大写字符。大写字符宏转换函数_tolower用于将大写字符转换为小写字符。该函数其实是一个由宏定义完成的操作,执行的操作是将字符参数c与常数0x20逐位进行或运算,从而将大写字符转换为小写字符。程序示例如下。


include<ctype.h>//头文件

include<stdio.h>

include<reg51.h>

void main(void)//主函数

{

char ch;//变量声明

char ch_lower;

//初始化串口

ch=‘A’;//字符变量赋值

ch_lower=_tolower(ch);//调用函数

printf(“_tolower(%c)=%c\n”,ch,ch_lower);//输出结果

}


该程序可以在KeilµVision3编译环境中执行,运行的结果如下。


_tolower(A)=a


在该程序中,首先为字符变量ch赋值,然后调用_tolower函数将大写字符转换为小写字符,运行的结果将通过串口输出。

17.小写字符宏转换函数_toupper

小写字符宏转换函数_toupper的函数原型如下。


char_toupper(char c);


其中,c为待转换的小写字符。小写字符宏转换函数_toupper用于将小写字符转换为大写字符。该函数其实是一个由宏定义完成的操作,其功能是将字符参数c与常数0xdf逐位进行与运算,从而将小写字符转换为大写字符。程序示例如下。


include<ctype.h>//头文件

include<stdio.h>

include<reg51.h>

void main(void)//主函数

{

char ch;//变量声明

char ch_upper;

//初始化串口

ch=‘r’;//字符变量赋值

ch_upper=_toupper(ch);//调用函数

printf(“_toupper(%c)=%c\n”,ch,ch_upper);//输出结果

}


该程序可以在KeilµVision3编译环境中执行,运行的结果如下。


_toupper(r)=R


在该程序中,首先为字符变量ch赋值,然后调用_toupper函数将小写字符转换为大写字符,运行的结果将通过串口输出。