注意:
1、字符函数要求的头部文件是<ctype.h>
2、C语言对数组操作不进行边界检查,数组发生溢出时,将导致程序瘫痪。
下面是介绍的函数:
①isalnum
int isalnum(int ch);
功能:如果ch是字符或数字,那么函数返回非零值,否则返回零值。
例如:
1#include<stdio.h>
2#include<ctype.h>
3
4int main(void)
5{
6 char ch;
7
8 for(;;)
9 {
10 ch=getc(stdin);
11 if(ch=='.')break;
12 if(isalnum(ch))
13 printf("%c is alphanumeric\n",ch);
14 }
15
16 return 0;
17}
当你输入字符或字符串或数字时显示为alphanumeric,其他字符跳过,例如显示结果为:
1y
2y is alphanumeric
32
42 is alphanumeric
53
63 is alphanumeric
7you
8y is alphanumeric
9o is alphanumeric
10u is alphanumeric
11;
12'
13\
141
151 is alphanumeric
16.
②isalpha
int isalpha(ch);
功能:当ch内容是字母(大写小写),那么函数返回非零值;否则返回零值。例如:
1#include<stdio.h>
2#include<ctype.h>
3
4int main(void)
5{
6 char ch;
7
8 for(;;)
9 {
10 ch=getchar();
11 if(ch=='.')break;
12 if(isalpha(ch))
13 printf("%c is a letter\n",ch);
14 }
15
16 return 0;
17}
输入字母或数字或符号,显示结果为:
11
22
3a
4a is a letter
5A
6A is a letter
7;
8\
9'
10,
11.
③isblank
int isblank(int ch);
功能:在英语中,空字符就是空格和水平制表符,此函数可以检测空字符,返回非零值;如果非空字符,那么返回零值,例如:
1#include<stdio.h>
2#include<ctype.h>
3
4int main(void)
5{
6 char ch;
7
8 for(;;)
9 {
10 ch=getchar();
11 if(ch=='.')break;
12 if(isblank(ch))
13 printf("%c is a word separator\n",ch);
14 }
15
16 return 0;
17}
下面是检测的结果:
1,
2
3 is a word separator
4
5 is a word separator
6
7我
8的
9
10 is a word separator
11you can finish it.
12 is a word separator
13 is a word separator
14 is a word separator
此程序能够检查每个读自stdin的字符,并报告各个单词的字符数。
④iscntrl
int iscontrl(int ch);
功能:当ch为0到0x1F之间或0x7F(DEL)时(具体可以查看另一篇转载过来的ASCII表的文章),函数iscntrl()返回非零值;否则返回零值。例如:
1#include<stdio.h>
2#include<ctype.h>
3
4int main(void)
5{
6 char ch;
7
8 for(;;)
9 {
10 ch=getchar();
11 if(ch=='.')break;
12 if(iscntrl(ch))
13 printf("%c is a word separator\n",ch);
14 }
15
16 return 0;
17}
例如输入结果显示为(如按下ENTER键):
1
2
3 is a word separator
4a
5
6 is a word separator
⑤isdigit
int isdigit(int ch);
当ch为数字时(0到9),函数返回非零值;否则,返回零值。例如:
1#include<stdio.h>
2#include<ctype.h>
3
4int main(void)
5{
6 char ch;
7
8 for(;;)
9 {
10 ch=getchar();
11 if(ch=='.')break;
12 if(isdigit(ch))
13 printf("%c is a digit\n",ch);
14 }
15
16 return 0;
17}
显示结果为:
11
21 is a digit
32
42 is a digit
5a
6C
75
85 is a digit
⑥isgraph
int isgraph(int ch);
如果ch为除空格之外的可打印字符,函数返回非零值;否则返回零值。对于ASCII环境,可打印字符是0x21到0x7E范围内的值。
例如:
1#include<stdio.h>
2#include<ctype.h>
3
4int main(void)
5{
6 char ch;
7
8 for(;;)
9 {
10 ch=getchar();
11 if(ch=='.')break;
12 if(isgraph(ch))
13 printf("%c is printable.\n",ch);
14 }
15
16 return 0;
17}
显示结果为:
1you
2y is printable.
3o is printable.
4u is printable.
51
61 is printable.
7
8
其中,第7行输入空格然会回车,结果显示在第8行(空格不可打印,所以没内容)。
⑧isprint
int isprint(int ch);
功能跟isgraph一样,只是可打印字符含空格。
例如显示结果为:
1
2 is printable.
⑨islower
int islower(int ch);
功能:如果ch为小写字母,函数返回非零值;否则返回零值。
⑩ispunct
int ispunct(int ch);
功能:如果ch为标点符号,函数返回非零值;否则,返回零值。这里所说的标点符号指既不是字母数字、也不是空格的所有的打印字符。
例如:
1#include<stdio.h>
2#include<ctype.h>
3
4int main(void)
5{
6 char ch;
7
8 for(;;)
9 {
10 ch=getchar();
11 if(ch=='.')break;
12 if(ispunct(ch))
13 printf("%c is a punctuation.\n",ch);
14 }
15
16 return 0;
17}
显示结果为:
1'
2' is a punctuation.
3;
4; is a punctuation.
5\
6\ is a punctuation.
7a
8s
9A
10,
11, is a punctuation.