注意:
1、字符函数要求的头部文件是<ctype.h>
2、C语言对数组操作不进行边界检查,数组发生溢出时,将导致程序瘫痪。
下面是介绍的函数:
①isalnum
int isalnum(int ch);
功能:如果ch是字符或数字,那么函数返回非零值,否则返回零值。
例如:
1
#include<stdio.h>
2
#include<ctype.h>
3
4
int 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,其他字符跳过,例如显示结果为:
1
y
2
y is alphanumeric
3
2
4
2 is alphanumeric
5
3
6
3 is alphanumeric
7
you
8
y is alphanumeric
9
o is alphanumeric
10
u is alphanumeric
11
;
12
'
13
\
14
1
15
1 is alphanumeric
16
.
②isalpha
int isalpha(ch);
功能:当ch内容是字母(大写小写),那么函数返回非零值;否则返回零值。例如:
1
#include<stdio.h>
2
#include<ctype.h>
3
4
int 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
}
输入字母或数字或符号,显示结果为:
1
1
2
2
3
a
4
a is a letter
5
A
6
A is a letter
7
;
8
\
9
'
10
,
11
.
③isblank
int isblank(int ch);
功能:在英语中,空字符就是空格和水平制表符,此函数可以检测空字符,返回非零值;如果非空字符,那么返回零值,例如:
1
#include<stdio.h>
2
#include<ctype.h>
3
4
int 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
11
you 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
4
int 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
4
a
5
6
is a word separator
⑤isdigit
int isdigit(int ch);
当ch为数字时(0到9),函数返回非零值;否则,返回零值。例如:
1
#include<stdio.h>
2
#include<ctype.h>
3
4
int 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
}
显示结果为:
1
1
2
1 is a digit
3
2
4
2 is a digit
5
a
6
C
7
5
8
5 is a digit
⑥isgraph
int isgraph(int ch);
如果ch为除空格之外的可打印字符,函数返回非零值;否则返回零值。对于ASCII环境,可打印字符是0x21到0x7E范围内的值。
例如:
1
#include<stdio.h>
2
#include<ctype.h>
3
4
int 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
}
显示结果为:
1
you
2
y is printable.
3
o is printable.
4
u is printable.
5
1
6
1 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
4
int 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.
7
a
8
s
9
A
10
,
11
, is a punctuation.