C/C++函数与算法速查宝典
上QQ阅读APP看书,第一时间看更新

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所示。

图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是十六进制数中的数字。