字符处理有两类函数:分类与转换。分类函数的名称以is开头,转换函数的名称以to开头,一般在ctype.h头文件中声明。宽字符处理也有分类与转换函数之分,这些函数的名称以isw和tow开头,还有通用的分类与转换函数,wctrans和towctrans,这些函数都在头文件wctype.h中定义。
习惯上,C语言中的字符串是以null字符(‘\0‘)结尾的字符数组。C89增补1增加了与普通字符串函数并行的宽字符串函数,差别在于宽字符串函数所带的参数类型为wchar_t*而不是char*,宽字符串函数名把普通字符串函数开头的字母str改成wcs,宽字符串以宽null字符终止,比较宽字符串时,比较wchar_t元素的整数值,宽字符串不进行解释,不会发生编码错误。
下面列举一些与字符串相关的函数。
char* strcat(char *dest, const char *src);
char* strncat(char *dest, const char *src, size_t n);
函数strcat将字符串src的内容添加到字符串dest末尾,返回dest值,strncat函数从src内容中将最多n个字符添加到dest末尾。
int strcmp(const char *s1, const char *s2);
int strncmp(const char *s1, const char *s2, size_t n);
函数strcmp在词法上比较以null终止的字符串s1与以null终止的字符串s2的内容,返回一个int类型值,在s1小于s2时小于0,在s1等于s2是为0,在s1大于s2时大于0,函数strncmp与strcmp相似,只是至多比较以null终止的字符串s1的前n个字符与以null终止的字符串s2的前n个字符。
char* strcpy(char *dest, const char *src);
char* strncpy(char *dest, const char *src, size_t n);
函数strcpy将字符串src的内容复制到字符串dest,覆盖dest中原先的内容,返回dest,函数strncpy只把n个字符复制到dest。
size_t strlen(const char *s);
函数strlen返回s中终止null字符之前的字符数。
char* strchr(const char *s, int c);
char* strrchr(const char *s, int c);
函数strchr搜索字符串s中第一次出现的字符c,如果在字符串中找到了字符c,则返回指向第一个c的指针,函数strrchr与strchr相似,只是返回指向最后一个字符c的指针。
size_t strspn(const char *s, const char *set);
size_t strcspn(const char *s, const char *set);
char* strpbrk(const char *s, const char *set);
函数strspn搜索字符串s中第一个不包含在字符串set中的字符,跳过那些set中包含的字符,返回的值是s中从第一个字符起全部由set中字符组成的段的最大长度,函数strcspn与strspn相似,只是搜索字符串s中第一个在字符串set中的字符,跳过不在set中的字符,函数strpbrk与strcspn相似,只是返回指向找到的set中第一个字符的指针,而不是跳过的字符数。
char* strstr(const char *src, const char *sub);
char* strtok(char *str, const char *set);
函数strstr找到字符串src中第一次出现字符串sub的位置,并返回指向第一次出现的子串的开头的指针。strtok函数将字符串str分解为由字符串set中的字符分隔的记号。
int strcoll(const char *s1, const char *s2);
size_t strxfrm(char *dest, const char *src, size_t len);
strcoll与strxfrm函数提供特定区域设置的字符串排序功能。
另外,还有一些类型转换函数,例如strtod、strtof、strtold、strtol、strtoll、strtoul、strtoull、
atof、atoi、atol、atoll等。