1.1 字符测试函数
C语言中的字符测试函数可以判断字符属于哪种类型,比如是属于英文字母、数字字符、控制字符、可打印字符、小写英文字母、标点符号、空白符,还是属于十六进制字符。另外,还可以判断字符属于ASCII码的范围等。
1.1.1 isalnum函数──判断是否是英文字母或数字字符
1.函数原型
int isalnum(int ch);
2.函数功能
isalnum函数的功能是判断字符是否是英文字母或数字字符。
3.函数参数
参数ch:可以是字符,也可以是整型数字。
4.函数的返回值
如果ch是英文字母或数字字符,则返回非0值;否则返回0。
5.函数范例
/********************************************
*范例编号:01_01
*范例说明:判断字符是否是英文字母或数字字符
*********************************************/
01 #include <stdio.h>
02 #include <ctype.h>
03 void main()
04 {
05 char ch1=’*’;
06 char ch2=’2’;
07 if(isalnum(ch1)!=0)
08 printf(“’%c’是英文字母或数字字符\n”,ch1);
09 else
10 printf(“’%c’不是英文字母也不是数字字符\n”,ch1);
11 if(isalnum(ch2)!=0)
12 printf(“’%c’是英文字母或数字字符\n”,ch2);
13 else
14 printf(“’%c’不是英文字母或数字字符\n”,ch2);
15 } system(“pause”);
该函数范例的运行结果如图1-1所示。
图1-1 函数范例的运行结果
6.函数解析
(1)参数 ch 必须是用单引号括起来的字符,或者是整型数字。例如,’a’’2’’5’’%’都是合法的。
(2)如果 ch 是’0’~’9’的数字,或者是’A’~’Z’和’a’~’z’的字符时,则返回非0值;否则返回0。
7.应用说明
isalnum函数是宏定义,非真正函数。
1.1.2 isalpha函数──判断是否为英文字母
1.函数原型
int isalpha(int ch);
2.函数功能
isalpha函数的功能是判断ch是否是英文字母。
3.函数参数
参数ch:可以是带单引号的英文字母,也可以是带单引号的数字,或其他字符。
4.函数的返回值
如果ch是英文字母(‘A’~’Z’或’a’~’z’),则返回非0值;否则返回0。
5.函数范例
/********************************************
*范例编号:01_02
*范例说明:判断字符是否是英文字母
*********************************************/
01 #include <stdio.h>
02 #include <ctype.h>
03 #include <stdlib.h>
04 void main()
05 {
06 int c;
07 c=’x’;
08 printf(“%c:%s\n”,c,isalpha(c)?”是英文字母”:”不是英文字母”);
09 c=’6’;
10 printf(“%c:%s\n”,c,isalpha(c)?”是英文字母”:”不是英文字母”);
11 c=’&’;
12 printf(“%c:%s\n”,c,isalpha(c)?”是英文字母”:”不是英文字母”);
13 system(“pause”);
14 }
该函数范例的运行结果如图1-2所示。
图1-2 函数范例的运行结果
6.函数解析
(1)参数 ch必须是带单引号的字符,或者是整型数字。与isalnum函数的参数取值相同。
(2)如果ch是小写英文字母或大写英文字母,即’A’~’Z’或’a’~’z’,则函数返回非0值;否则返回0。
1.1.3 isascii函数──判断ASCII码是否位于0~127
1.函数原型
int isascii(int ch);
2.函数功能
isascii函数的功能是判断ch的ASCII码是否位于0~127,也就是判断ch是否为ASCII码字符。
3.函数参数
参数ch:可以是带单引号的字符,也可以是整型数字。
4.函数的返回值
如果ch的ASCII码位于0~127,则函数返回非0值;否则返回0。ASCII的全称为美国信息交换标准代码,是一种标准的单字节字符编码方案,用来表示常用的英文字母、数字等字符与二进制数的对应关系。
5.函数范例
/********************************************
*范例编号:01_03
*范例说明:判断字符的ASCII码是否位于0~127
*********************************************/
01 #include <stdio.h>
02 #include <ctype.h>
03 #include <stdlib.h>
04 void main()
05 {
06 int i,n;
07 char str[]={‘B’,0x80,’a’,’y’};
08 n=sizeof(str)/sizeof(char);
09 for(i=0;i<n;i++)
10 {
11 printf(“%c%s是一个ASCII字符\n”, str[i],(isascii(str[i]))?””:”不”);
12 }
13 system(“pause”);
14 }
该函数范例的运行结果如图1-3所示。
图1-3 函数范例的运行结果
6.函数解析
(1)参数ch的取值合法性与isalpha函数的参数取值相同。
(2)主要判断ch的ASCII码是否位于0~127。
1.1.4 iscntrl函数──判断是否是控制字符
1.函数原型
int iscntrl(int ch);
2.函数功能
iscntrl函数的功能是判断ch是否是控制字符,即ASCII码是否位于0x00(NOL)~0x1f(VS)或等于0x7f(Delete键的ASCII码)。
3.函数参数
参数ch:可以是带单引号的字符,也可以是整型数字。
4.函数的返回值
如果ch是控制字符,则函数返回非0值;否则返回0。
5.函数范例
/********************************************
*范例编号:01_04
*范例说明:判断字符是否是控制字符
*********************************************/
01 #include <stdio.h>
02 #include <ctype.h>
03 #include <stdlib.h>
03 void main()
04 {
05 int c;
06 c=’a’;
07 printf(“’%c’%s\n”,c,iscntrl(c)?”是控制字符”:”不是控制字符”);
08 c=13;
09 printf(“ASCII码为%x的字符%s\n”,c,iscntrl(c)?
10 “是控制字符”:”不是控制字符”);
11 c=0x7f;
12 printf(“ASCII码为%x的字符%s\n”,c,iscntrl(c)?
13 “是控制字符”:”不是控制字符”);
14 system(“pause”);
15 }
该函数范例的运行结果如图1-4所示。
图1-4 函数范例的运行结果
6.函数解析
(1)参数ch的取值合法性与isalpha函数的参数取值相同。
(2)控制字符的ASCII码是0x00~0x1f和0x7f。
1.1.5 isdigit函数──判断是否是数字字符
1.函数原型
int isdigit(int ch);
2.函数功能
isdigit函数的功能是判断ch是否是数字字符,即是否是’0’~’9’的字符。
3.函数参数
参数ch:可以是带单引号的字符,也可以是整型数字。
4.函数的返回值
如果ch的取值在’0’~’9’,则函数返回非0值;否则返回0。
5.函数范例
/********************************************
*范例编号:01_05
*范例说明:判断字符是否是数字字符
*********************************************/
01 #include <stdio.h>
02 #include <ctype.h>
03 #include <stdlib.h>
04 void main()
05 {
06 char str[]=”2%3a5S”;
07 int i;
08 for(i=0;str[i]!=’\0’;i++)
09 printf(“%c%s数字字符.\n”,str[i],isdigit(str[i])?”是”:”不是”);
10 system(“pause”);
11 }
该函数范例的运行结果如图1-5所示。
图1-5 函数范例的运行结果
6.函数解析
(1)参数ch的取值合法性与isalpha函数的参数取值相同。
(2)数字字符分别是’0’’1’…’9’,对应的ASCII码分别是48、49、…、57。
注意:不要将数字字符与数字0、1、…、9混淆。
1.1.6 isgraph函数──判断是否是可打印字符(不包括空格)
1.函数原型
int isgraph(int ch);
2.函数功能
isgraph函数的功能是判断ch是否是可打印字符(不包括空格)。
3.函数参数
参数ch:可以是带单引号的字符,也可以是整型数字。
4.函数的返回值
如果ch是可打印字符(不包括空格),则返回非0值;否则返回0。
5.函数范例
/********************************************
*范例编号:01_06
*范例说明:判断字符是否是可打印字符(不包括空格)
*********************************************/
01 #include <stdio.h>
02 #include <ctype.h>
03 #include <stdlib.h>
04 void main ()
05 {
06 char ch;
07 while(1)
08 {
09 printf(“请输入一个字符(退出请输入’q’):”);
10 ch=getchar();
11 getchar();
12 if(isgraph(ch))
13 printf(“’%c’是可打印字符.\n”,ch);
14 else
15 printf(“’%c’不是可打印字符.\n”,ch);
16 if(ch==’q’)
17 break;
18 }
19 system(“pause”);
20 }
该函数范例的运行结果如图1-6所示。
图1-6 函数范例的运行结果
6.函数解析
(1)参数ch的取值合法性与isalpha函数的参数取值相同。
(2)可打印字符指的是可显示字符,英文字母、数字字符、标点符号都是可打印字符,可打印字符的ASCII码在33~127。换行符、回车符、空格符、Tab键对应的字符都是不可打印字符。
1.1.7 islower函数──判断是否是小写英文字母
1.函数原型
int islower(int ch);
2.函数功能
islower函数的功能是判断ch是否是小写英文字母。
3.函数参数
参数ch:可以是带单引号的字符,也可以是整型数字。
4.函数的返回值
如果ch是小写英文字母,则返回非0值;否则返回0。
5.函数范例
/********************************************
*范例编号:01_07
*范例说明:判断字符是否是小写英文字母
*********************************************/
01 #include <stdio.h>
02 #include <ctype.h>
03 #include <stdlib.h> void main()
04 {
05 int i=0,low_count=0,upper_count=0,other=0;
06 char str[]=”Test String.”;
07 char ch;
08 while(str[i])
09 {
10 ch=str[i];
11 if(islower(ch))
12 {
13 printf(“’%c’是小写英文字母.\n”,ch);
14 low_count++;
15 }
16 else if(isupper(ch))
17 {
18 printf(“’%c’是大写英文字母.\n”,ch);
19 upper_count++;
20 }
21 else
22 {
23 printf(“’%c’是其他字符.\n”,ch);
24 other++;
25 }
26 i++;
27 }
28 printf(“小写字母有%d个,大写字母有%d个,其他字符有%d个.\n”,
29 low_count,upper_count,other);
30 system(“pause”);
31 }
该函数范例的运行结果如图1-7所示。
图1-7 函数范例的运行结果
6.函数解析
(1)参数ch的取值合法性与isalpha函数的参数取值相同。
(2)小写英文字母是’a’~’z’的字母,共26个,对应的ASCII码为97~122。
1.1.8 isprint函数──判断是否是可打印字符(包括空格)
1.函数原型
int isprint(int ch);
2.函数功能
isprint函数的功能是判断ch是否是可打印字符(包括空格)。
3.函数参数
参数ch:可以是带单引号的字符,也可以是整型数字。
4.函数的返回值
如果ch是可打印字符(包括空格),则返回非0值;否则返回0。
5.函数范例
/********************************************
*范例编号:01_08
*范例说明:判断字符是否是可打印字符(包括空格)
*********************************************/
01 #include <stdio.h>
02 #include <ctype.h>
03 #include <stdlib.h> void main()
04 {
05 int i=0;
06 char str[]=”Welcome to you!\nWelcome to Beijing!\n”;
07 while(isprint(str[i]))
08 {
09 putchar(str[i]);
10 i++;
11 }
12 system(“pause”);
13 }
该函数范例的运行结果如图1-8所示。
图1-8 函数范例的运行结果
6.函数解析
(1)参数ch的取值合法性与isalpha函数的参数取值相同。
(2)isprint函数与isgraph函数都是判断字符是否是可打印字符的函数,区别在于前者将空格符作为不可打印字符,而后者则将空格符作为可打印字符。
(3)在范例程序中,因为有不可打印字符’\n’,所以只输出了第1个’\n’之前的字符。
(4)putchar函数的作用是将一个字符输出。
1.1.9 ispunct函数──判断是否是标点符号
1.函数原型
int ispunct(int ch);
2.函数功能
ispunct函数的功能是判断ch是否是标点符号。
3.函数参数
参数ch:可以是带单引号的字符,也可以是整型数字。
4.函数的返回值
如果ch是标点符号,则返回非0值;否则返回0。
5.函数范例
/********************************************
*范例编号:01_09
*范例说明:判断字符是否是标点符号
*********************************************/
01 #include <stdio.h>
02 #include <ctype.h>
03 #include <stdlib.h> void main()
04 {
05 char str1[]=”How are you,Mr Liu!”;
06 char str2[]=”Mobile interface development,system analyst,algorithm design!”;
07 int i=0,count=0;
08 char *p;
09 while(str1[i]!=’\0’)
10 {
11 if(ispunct(str1[i]))
12 count++;
13 i++;
14 }
15 printf (“字符串%s包含%d个标点符号.\n”,str1,count);
16 p=str2;
17 count=0;
18 while(*p!=’\0’)
19 {
20 if(ispunct(*p))
21 count++;
22 p++;
23 }
24 printf (“字符串%s包含%d个标点符号.\n”,str2,count);
25 system(“pause”);
26 }
该函数范例的运行结果如图1-9所示。
图1-9 函数范例的运行结果
6.函数解析
(1)参数ch的取值合法性与isalpha函数的参数取值相同。
(2)在范例程序中,count是计数器,表示标点符号的个数。
1.1.10 isspace函数──判断是否是空白符
1.函数原型
int isspace(int ch);
2.函数功能
isspace函数的功能是判断ch是否是空白符,空白符包括空格符、水平制表符、回车符等,如表1-1所示。
表1-1 空白符与ASCII码的对应关系
3.函数参数
参数ch:可以是带单引号的字符,也可以是整型数字。
4.函数的返回值
如果ch是空白符,则返回非0值;否则返回0。
5.函数范例
/********************************************
*范例编号:01_10
*范例说明:判断字符是否是空白符
*********************************************/
01 #include <stdio.h>
02 #include <ctype.h>
03 #include <stdlib.h>
04 void main()
05 {
06 char str[]=”Huge come from Beijing!\n”;
07 char *p;
08 int count=0,alpha_count=0,black_count=0,other_count=0;
09 for(p=str;*p!=’\0’;p++)
10 {
11 if(isspace(*p))
12 black_count++;
13 else if(isalpha(*p))
14 alpha_count++;
15 else
16 other_count++;
17 count++;
18 putchar(*p);
19 }
20 printf(“字符个数为%d,英文字母个数为%d,空白符个数为%d,其他字符个数为%d\n”,
21 count,alpha_count,black_count,other_count);
22 system(“pause”);
23 }
该函数范例的运行结果如图1-10所示。
6.函数解析
(1)参数ch的取值合法性与isalpha函数的参数取值相同。
(2)在范例程序中,逐个判断字符串中的字符,如果是空白符,则将’\n’赋值给c,然后输出c;否则,直接输出c。
1.1.11 isxdigit函数──判断是否是十六进制字符
1.函数原型
int isxdigit(int ch);
2.函数功能
isxdigit函数的功能是判断ch是否是十六进制数字0~9和A~F(a~f)。
3.函数参数
参数ch:可以是带单引号的字符,也可以是整型数字。
4.函数的返回值
如果ch是十六进制数字对应字符,则返回非0值;否则返回0。
5.函数范例
/********************************************
*范例编号:01_11
*范例说明:判断字符是否是十六进制数字
*********************************************/
01 #include <stdio.h>
02 #include <ctype.h>
03 #include <string.h> void main()
04 {
05 char str[3][10]={“2FE9H”,”3EC7”,”X48A”};
06 int i,k,len;
07 for(k=0;k<3;k++)
08 {
09 len=strlen(str[k]);
10 for(i=0;str[i]!=’\0’;)
11 if(isxdigit(str[k][i]))
12 i++;
13 else
14 break;
15 if(i>=len)
16 printf(“%s是十六进制对应的字符\n”,str[k]);
17 else
18 printf(“%s不是十六进制对应的字符\n”,str[k]);
19 }
20 }
该函数范例的运行结果如图1-11所示。
图1-11 函数范例的运行结果
6.函数解析
(1)参数ch的取值合法性与isalpha函数的参数取值相同。
(2)在范例程序中,因为字符串”2FE9H”中含有字符’H’,”X48A”中含有’X’,所以两者都不是十六进制数字对应的字符串。
(3)isxdigit函数的作用是判断ch是否是十六进制数字对应的字符,而不是判断ch是否是十六进制数。’0’’1’’C’是十六进制数对应的字符,0、1、C是十六进制数中的数字。