C语言的字符与字符串处理函数

来源:互联网 发布:okhttp源码解析 编辑:程序博客网 时间:2024/06/09 20:17

字符处理有两类函数:分类转换。分类函数的名称以is开头,转换函数的名称以to开头,一般在ctype.h头文件中声明。宽字符处理也有分类与转换函数之分,这些函数的名称以iswtow开头,还有通用的分类与转换函数,wctranstowctrans,这些函数都在头文件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,函数strncmpstrcmp相似,只是至多比较以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的指针,函数strrchrstrchr相似,只是返回指向最后一个字符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中字符组成的段的最大长度,函数strcspnstrspn相似,只是搜索字符串s中第一个在字符串set中的字符,跳过不在set中的字符,函数strpbrkstrcspn相似,只是返回指向找到的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);

strcollstrxfrm函数提供特定区域设置的字符串排序功能。

另外,还有一些类型转换函数,例如strtodstrtofstrtoldstrtolstrtollstrtoulstrtoull

atofatoiatolatoll等。


string.h还提供了一些用于复制、比较与设置内存块的函数,这些函数名称以mem开头,内存块在标准C语言中用void*类型指针指定,常用函数原型如下:

void* memchr(const void *ptr, int val, size_t len);

int memcmp(const void *ptr1, const void *ptr2, size_t len);

int memcpy(void *dest, const void *src, size_t len);

int memmove(void *dest, const void *src, size_t len);

void* memset(void *ptr, int val, size_t len);



1 0