ctype.h头文件的API的学习。<ctype.h>头文件声明了多个用于字符分类和字符映射的函数。在这些函数中,参数均为一个int类型整数,其值可用unsigned char类型表示或者等于宏EOF。如果参数具有其它值,函数行为是未定义的。<ctype.h>头文件中声明的函数会受当前语言环境的影响。“C”语言环境是所有C程序默认的语言环境。
实现环境: window11, VS2017
<ctype.h>头文件中声明的函数具体如下:
函数(function):
字符分类函数:
isalnum | 检查字符是否为字母或者十进制数字字符的函数。 |
isalpha | 检查字符是否为字母的函数。 |
isblank | 检查字符是否为空白字符的函数。 |
iscntrl | 检查字符是否为控制字符的函数。 |
isdigit | 检查字符是否为十进制数字字符的函数。 |
isgraph | 检查字符是否为打印字符(空格符' '除外)的函数。 |
islower | 检查字符是否为小写字母的函数。 |
isprint | 检查字符是否为打印字符(包括空格符' ')的函数。 |
ispunct | 检查字符是否为标点符号的函数。 |
isspace | 检查字符是否为空格字符的函数。 |
isupper | 检查字符是否为大写字母的函数。 |
isxdigit | 检查字符是否为十六进制数字字符的函数。 |
字符大小写映射函数:
tolower | 将大写字母转换成小写字母的函数。 |
toupper | 将小写字母转换成大写字母的函数。 |
示例代码:
#include <ctype.h>
#include <stdio.h>
int main(void)
{
int i = 0;
int count = 0;
const char str[] = "The year 2049 marks the centenary of the People's Republic of China.";
//isalnum 检查字符是否为字母或者十进制数字字符的函数。
while (str[i])
{
if (isalnum(str[i]))
++count;
++i;
}
printf("The number of alphanumeric characters: %d\n", count);
//isalpha 检查字符是否为字母的函数。
int i2 = 0;
int count2 = 0; //计数器,统计字母数量。
const char str2[] = "I am a slow walker, but I never walk backwards.";
while (str2[i2])
{
if (isalpha(str[i2]))
++count2;
++i2;
}
printf("There are %d alphabets in the sentence.", count2);
//isblank 检查字符是否为空白字符的函数。
int i3 = 0;
const char str3[] = "Truth never fears investigation.";
while (str3[i3])
{
if (isalnum(str3[i3]))
putchar(str3[i3]);
if (isblank(str3[i3]))
putchar('\n');
++i3;
}
//iscntrl 检查字符是否为控制字符的函数。
int i4 = 0;
int count4 = 0; //计数器,统计控制字符数量。
const char str4[] = "I am a slow walker,\n but I never walk backwards.\n";
while (str4[i4])
{
if (iscntrl(str4[i4]))
++count4;
++i4;
}
printf("There are %d control characters in the sentence.", count4);
//isdigit 检查字符是否为十进制数字字符的函数。
int i5 = 0;
const char str5[] = "The year 2049 marks the centenary of the People's Republic of China.";
puts("Decimal-digit characters in the sentence:");
while (str5[i5])
{
if (isdigit(str5[i5]))
{
putchar(str5[i5]);
putchar('\n');
}
++i5;
}
//isgraph 检查字符是否为打印字符(空格符' '除外)的函数。
int i6 = 0;
int count6 = 0; //计数器,统计打印字符(空格符除外)的数量。
const char str6[] = "I am a slow walker, but I never walk backwards.";
while (str6[i6])
{
if (isgraph(str6[i6]))
++count6;
++i6;
}
printf("There are %d printing characters except space in the sentence.\n", count6);
//islower 检查字符是否为小写字母的函数。
int i7 = 0;
int count7 = 0; //计数器,统计小写字母数。
const char str7[] = "I am a slow walker, but I never walk backwards.";
while (str7[i7])
{
if (islower(str7[i7]))
++count7;
++i7;
}
printf("There are %d lowercase letters in the sentence.\n", count7);
//isprint 检查字符是否为打印字符(包括空格符' ')的函数。
int i8 = 0;
int count8 = 0; //计数器,统计打印字符(包括空格符' ')的数量。
const char str8[] = "I am a slow walker, but I never walk backwards.";
while (str8[i8])
{
if (isprint(str8[i8]))
++count8;
++i8;
}
printf("There are %d printing characters including space in the sentence.\n", count8);
//ispunct 检查字符是否为标点符号的函数。
int i9 = 0;
int count9 = 0; //计数器,统计标点符号数量。
const char str9[] = "I am a slow walker, but I never walk backwards.";
while (str9[i9])
{
if (ispunct(str9[i9]))
++count9;
++i9;
}
printf("There are %d punctuation characters in the sentence.\n", count9);
//isspace 检查字符是否为空格字符的函数。
int i10 = 0;
const char str10[] = "It is never too late to learn.";
while (str10[i10])
{
if (isalnum(str10[i10]))
putchar(str10[i10]);
if (isspace(str10[i10]))
putchar('\n');
++i10;
}
//isupper 检查字符是否为大写字母的函数。
int i11 = 0;
int count11 = 0; //计数器,统计大写字母数量。
const char str11[] = "I am a slow walker, but I never walk backwards.";
while (str11[i11])
{
if (isupper(str11[i11]))
++count11;
++i11;
}
printf("There are %d uppercase letters in the sentence.\n", count11);
//isxdigit 检查字符是否为十六进制数字字符的函数。
int i12 = 0;
const char str12[] = "key moments in 100 years";
puts("Hexadecimal-digit characters in the sentence:");
while (str12[i12])
{
if (isxdigit(str12[i12]))
{
putchar(str12[i12]);
putchar(' ');
}
++i12;
}
putchar('\n');
//tolower 将大写字母转换成小写字母的函数。
int i13 = 0;
const char str13[] = "WWW.STANDARDS.WIKI";
while (str13[i13])
{
putchar(tolower(str13[i13++]));
}
putchar('\n');
//toupper 将小写字母转换成大写字母的函数。
int i14 = 0;
const char str14[] = "www.standards.wiki";
while (str14[i14])
{
putchar(toupper(str14[i14++]));
}
putchar('\n');
return 0;
}
运行结果:
参考:
https://www.standards.wiki/c/c_library_ctype.html
https://zh.cppreference.com/w/cpp/header/cctype
https://cplusplus.com/reference/cctype/