C语言的字符处理函数库提供了两类函数,一类是字符测试函数,一类是字符大小写转换函数。尽管可以使用其他方式来实现这些功能,但建议使用这些库函数,因为这些函数有以下优点:
- 大多数由宏实现,在运行速度上进行了优化
- 支持任何字符集,可移植性好
- 支持程序国际化
字符测试函数
字符测试函数包括以下几个,每个测试函数都返回0或1,1表示测试成功,0表示测试失败。
函数原型 | 函数意义 |
---|---|
int isalnum(int c) |
c 是否是字母或数字 |
int isalpha(int c) |
c 是否是字母 |
int iscntrl(int c) |
c 是否是控制字符 |
int isdigit(int c) |
c 是否是十进制数字 |
int isgraph(int c) |
c 是否是可显示字符(除去空格) |
int islower(int c) |
c 是否是小写字母 |
int isprint(int c) |
c 是否是可显示字符(包括空格) |
int ispunct(int c) |
c 是否是标点符号 |
int isspace(int c) |
c 是否是空格(包括换页符、换行符、回车符、横向制表符和纵向制表符 |
int isupper(int c) |
c 是否是大写字母 |
int isxdigit(int c) |
c 是否是16进制数 |
/*************************************
* using_test_function.c *
* *
* 测试字符串测试函数,引自C语言程序 *
* 设计-一种现代方法一书 *
*************************************/
#include <stdio.h>
#include <ctype.h>
#define TEST(f) printf(" %c ", f(*p) ? 'x' : ' ');
int main()
{
char *p;
printf(" alnum alpha cntrl graph print space xdigit digit lower punct upper\n");
for(p = "azAZ0 !\t"; *p != '\0'; p++)
{
if (iscntrl(*p))
printf("\\x%02x:", *p);
else
printf(" %c ", *p);
TEST(isalnum);
TEST(isalpha);
TEST(iscntrl);
TEST(isgraph);
TEST(isprint);
TEST(isspace);
TEST(isxdigit);
TEST(isdigit);
TEST(islower);
TEST(ispunct);
TEST(isupper);
printf("\n");
}
return 0;
}
字符大小写转换函数
int tolower(int c);
int toupper(int c);
tolower
函数返回字母c对应的小写字母,toupper
函数返回字母c对应的大写字母。
/******************************************
* using_lower_upper_transfer.c *
* *
* C语言中大小写转换函数测试,摘自C语言程 *
* 序设计-一种现代方法一书 *
******************************************/
#include <stdio.h>
#include <ctype.h>
int main()
{
char *p;
for (p = "aA0!"; *p != '\0'; p++)
{
printf("tolower('%c') is '%c'", *p, tolower(*p));
printf("toupper('%c'') is '%c'\n", *p, toupper(*p));
}
return 0;
}
参考文献
- K.N. King 著,吕秀峰 译. C语言程序设计-现代方法. 人民邮电出版社