C语言库函数提供给了我们许多常用的字符函数,我们依旧可以通过cplusplus.com网站来学习~
目录
strlen
strlen(string strlen)求字符串长度 函数的用于返回的是在字符串中 '\0' 前面出现的字符个数(不包含 '\0' )。![]()
strlen使用时得引头文件<string.h>,他的返回类型是size_t,参数(const char* str)是字符串的首地址。值得注意的是strlen返回类型为无符号整型,故(strlen(str1) - (str2))恒大于零。
下面为memcpy函数的模拟实现
#include<assert.h> size_t my_strlen(const char* str) { size_t count = 0; assert(str); while (*str!='\0') { count++; str++; } return count; }
strcpy
strcpy(string copy)函数用于将源指向的 C 字符串复制到目标所指向的数组中,包括终止空字符(并在该点停止)。为避免溢出,目标所指向的数组的大小应足够长,以包含与源相同的 C 字符串(包括终止空字符),并且内存中不应与源重叠。
strcpy使用时得引头文件<string.h>,他的返回类型是char*,第一个参数(char* destination)指向要在其中复制内容的目标数组的指针,第二个参数指向(char* source)要在其中复制内容的目标数组的指针。
#include<assert.h> char* my_strcpy(char* destination, const char* source) { assert(destination && source); char* p = destination; while (*source) { *destination++ = *source++; } *destination = *source; return p; }
strcat
strcat字符串追加函数用于将源字符串的副本追加到目标字符串。目标中的终止空字符被源的第一个字符覆盖,并且由目标中两者的串联形成的新字符串的末尾包含一个空字符。
strcat使用时得引头文件<string.h>,他的返回类型是char*,第一个参数(char* destination)指向指向目标数组的指针,目标数组应包含 C 字符串,并且足够大以包含串联的结果字符串,第二个参数(char* source)指向要追加的 C 字符串、这不应与目标重叠。
下面是strcat的模拟实现
#include<assert.h> char* my_strcat(char* destination, const char* source) { char* str = destination; assert(destination && source); while (*destination != '0') { destination++; } while (*destination++ = *source++); return str; }
strcmp
strcmp字符串比较函数用于将字符串 str1 与字符串 str2 进行比较。此函数开始比较每个字符串的第一个字符,如果它们彼此相等,则继续使用以下对,直到字符不同或达到终止空字符。
strcmp使用时得引头文件<string.h>,他的返回类型是int(指示字符串之间的关系,>0第一个不匹配的字符在 ptr1 中的值大于在 ptr2 中的值;<0第一个不匹配的字符在 ptr1 中的值低于在 ptr2 中的值,=0两个字符串的内容相等),第一个参数(char* destination)指向要比较的字符串,第二个参数(char* source)指向要比较的字符串。
下面是strcat的模拟实现
#include<assert.h> int my_strcmp(const char* str1, const char* str2) { assert(str1 && str2); while (*str1 == *str2 && *str1 ) { str1++; str2++; } return (*str1 - *str2); }
strstr
strstr查找子串函数用于返回指向 str1 中第一次出现的 str2 的指针,如果 str2 不是 str1 的一部分,则返回空指针。
strcpy使用时得引头文件<string.h>,他的返回类型是const char*,第一个参数(const char* str1)为要扫描的字符串,第二个参数(const char* str2)为包含要匹配的字符序列的字符串。
下面是strstr函数的模拟实现
#include<assert.h> const char* my_strstr(const char* str1, const char* str2) { assert(str1 && str2); const char* s1 = str1; const char* s2 = str2; const char* p = s1; while (*p) { s1 = p; s2 = str2; while (*s1 == *s2 && *s1 && *s2) { s1++; s2++; } if (*s2 == '\0') { return p; } p++; } return NULL; }
strtok
strtok字符串分割函数,
1. str参数是个字符串,定义了用作分隔符的字符集合
2.第一个参数指定一个字符串,它包含了 0 个或者多个由 sep 字符串中一个或者多个分隔符分割的标记。3.strtok 函数找到 str 中的下一个标记,并将其用 \0 结尾,返回一个指向这个标记的指针(注:strtok函数会改变被操作的字符串,所以在使用 strtok 函数切分的字符串一般都是临时拷贝的内容并且可修改。4.strtok 函数的第一个参数不为 NULL ,函数将找到 str 中第一个标记, strtok 函数将保存它在字符串中的位置。5.strtok 函数的第一个参数为 NULL ,函数将在同一个字符串中被保存的位置开始,查找下一个标记。下面是strtok的使用样例:![]()
strerror
strerror 错误报告函数,可以返回返回错误码所对应的错误信息。
下面是strerror的应用样例:
其中errno是C语言设置的一个全局的错误码存放的变量,用来保存最后的错误码
字符分类函数
函数 如果它的参数符合下列条件就返回真 isspace 空白字符:空格‘ ’,换页‘\f’,换行'\n',回车'\r',制表符'\t',或垂直制表符'\v' isdigit 十进制数字0~9 isxdigit 十六进制数字,包括所有十进制数字,小写字母a~f,大写字母A~F islower 小写字母a~z isupper 大写字母A~Z isalpha 字母a~z或A~Z isalnum 字母或数字a~z,A~Z或0~9 ispunct 标点符号,任何不属于数字或字母的图像字符(可打印符号) isgraph 如何图形字符 isprint 任何可打印字符,包括图像字符和空白字符 iscntrl 任何控制字符要调用这些字符分类函数不要忘记引头文件<ctype.h>哦~
好了,本章关于字符函数的介绍就到这了~