1、字符函数1.1 字符分类函数头⽂件ctype.h参数符合条件就返回真( !0 )譬如int islower ( int c );其他用法与之一致。大小写转化举例int i 0; char c; char str[] Test String.\n while (str[i]) { c str[i]; if (islower(c)) c - 32; putchar(c); i; } //【main】1.2 字符转换函数inttolower(intc );将传进去的参数的大写字母转小写inttoupper(intc );将传进去的参数的小写字母转大写大小写转换-toupperint i 0; char str[] Test String.\n; char c; while (str[i]) { c str[i]; if (islower(c)) c toupper(c); putchar(c); i; } //【main】2、字符串函数2.1strlensize_tstrlen(const char* str ); 头文件string.h统计字符串中\0 之前的字符的个数str 参数(指针)指向的字符串必须要以 \0 结束返回类型是 size_t 返回字符串的⻓度,打印用 %z举例使⽤const char* str abcdef; printf(%zd\n, strlen(str)); //【main】模拟实现计数器方式#include assert.h int my_strlen(const char * str) { int count 0;assert(str); while(*str) { count;str; } return count; }不创建临时变量计数器int my_strlen(const char * str) { assert(str); if(*str \0) return 0; else return 1 my_strlen(str1); }指针-指针int my_strlen(char *s) { assert(str); char *p s; while(*p ! \0) p; return p - s; }2.2 字符串拷贝2.2.1strcpychar*strcpy(char* destination,const char* source ); 头文件string.h拷贝到源头字符串中的\0 为⽌destination (指针) 必须⾜够⼤且可修改。source (指针) 必须以 \0 结束会将 \0 拷贝到 destination返回目标空间的起始地址举例使用char arr1[10] {0}; char arr2[] hello; strcpy(arr1, arr2); printf(%s\n, arr1); //【main】模拟实现1.参数顺序2.函数的功能停⽌条件3.assert4.const修饰指针5.函数返回值char* my_strcpy(char *dest, const char*src) { char *ret dest; assert(dest ! NULL src ! NULL); while((*dest *src)) ; return ret; }2.2.2strncpychar *strncpy (char *destination,const char *source, size_t num ); 头文件string.h返回目标空间的起始地址num从source指向的字符串中最多拷贝的字符个数举例使用char arr1[20] {0}; char arr2[] abcdefghi; char* str strncpy(arr1, arr2, 5); printf(%s\n, arr1); printf(%s\n, str); //【main】模拟实现2.2.3比较strcpy和strncpstrcpy函数拷贝到 \0 为⽌⽬标空间不够会越界。strncpy指定长度拷贝避免了 \0 的限制同样要考虑目标空间小。2.3 字符串追加2.3.1strcatchar*strcat(char* destination,const char* source ); 头文件string.hsource (指针)须以\0 结束,destination也要有 \0destination要够大且可修改不能追加自己举例使用har arr1[20] hello ; char arr2[] world; strcat(arr1, arr2); printf(%s\n, arr1); //【main】模拟实现char* my_strcat(char *dest, const char*src) { char *ret dest; assert(dest ! NULL); assert(src ! NULL); while(*dest) dest; while((*dest *src))//赋值把 src 指向的字符赋给 dest。 ; //移动dest、src 同时后移一位。 return ret; //判断检查赋值的字符是不是 \0 }2.3.2strncatchar *strncat (char *destination,const char *source,size_tnum ); 头文件string.h返回⽬标空间的起始地址num最多追加的字符的个数举例使用char arr1[20] hello ; char arr2[] world; char* str strncat(arr1, arr2, 5); printf(%s\n, arr1); printf(%s\n, str); //【main】模拟实现2.3.3比较strcat和strncatstrncat多一个参数strcat函数包含 \0都追加过去 strncat函数指定了追加的⻓度strncat函数中源字符串中⼀定会有 \0strncat更加灵活安全2.4 字符串比较2.4.1strcmpintstrcmp (const char *str1,const char *str2 ); 头文件string.h从两个字符串的第⼀个字符开始⽐较如果两字符的ASCII码值相等则⽐较下⼀个字符。直到遇到不相等的两个字符或者字符串结束。str1 、str2指针分别指向要⽐较的第⼀个及第二个字符串。举例使用char arr1[] abcdef; char arr2[] abq; int ret strcmp(arr1, arr2);printf(%d\n, ret); if(ret 0) printf(arr1 arr2\n); else if(ret 0) printf(arr1 arr2\n); else printf(arr1 arr2\n); //【main】模拟实现int my_strcmp (const char * str1, const char * str2) { int ret 0 ; assert(str1 ! NULL); assert(str2 ! NULL); while(*str1 *str2) { if(*str1 \0) return 0; str1; str2; } return *str1-*str2; }2.4.2strncmpintstrncmp (const char *str1,const char *str2,size_tnum ); 头文件string.h比较 str1和str2指向的两个字符串的内容最多⽐较num字符。str1、str2 指针指向⼀个比较的及另外⼀个⽐较的的字符串num最多比较的字符个数。举例使用char arr1[] abcdef; char arr2[] abcqw; int ret1 strncmp(arr1, arr2, 3); printf(%d\n, ret1); int ret2 strncmp(arr1, arr2, 4); printf(%d\n, ret2); //【main】2.4.3⽐较strcmp和strncmp参数不同strncmp可以⽐较任意长度strncmp函数更灵活安全2.5 其他字符串函数2.5.1 字符串查找strstrchar *strstr (const char *str1,const char *str2); 头文件string.h查找 str2 (指针) 指向的字符串在 str1 (指针) 指向的字符串中第⼀次出现的位置在⼀个字符串(str1) 中查找⼦字符串 (str2).举例使用char str[] This is a simple string; char * pch; pch strstr (str,simple); if (pch ! NULL) printf(%s\n, pch); else printf(查找的字符串不存在\n); //【main】模拟实现char * strstr (const char * str1, const char * str2) { char *cp (char *) str1; char *s1, *s2; if ( !*str2 ) //特殊情况str2是空字符串时 return((char *)str1); //直接返回str1 while (*cp) { s1 cp; s2 (char *) str2; while ( *s1 *s2 !(*s1-*s2) ) s1, s2; if (!*s2) return(cp); //返回第⼀次出现的起始 cp; } return(NULL); //找不到则返回NULL }2.5.2 分割修改原始字符串strtokchar *strtok(char *str,const char *delim); 头文件string.h功能参数返回值流程举例使用char arr[] 192.168.6.111; const char* sep .; const char* str NULL; char buf[30] {0}; strcpy(buf, arr); //将arr中的字符串拷⻉到buf中对buf的内容进⾏切割 for (str strtok(buf, sep); str ! NULL; str strtok(NULL, sep)) { printf(%s\n, str); } //【main】注意事项2.5.3 显示错误strerrorchar*strerror (interrnum ); 头文件string.h errno.herrnum 表⽰错误码得到对应的错误信息并返回错误信息字符串⾸字符的地址;只针对标准库中的函数发⽣错误后设置的错误码的转换;errnum传递的是errno(C语⾔中⼀个全局变量) 的值当库函数的调⽤发⽣错误的时候就会将本次错误的错误码存放在 errno 这个变量中使⽤这个全局变量需要包含⼀个头⽂件 errno.h返回 通过错误码得到的错误信息字符串的⾸字符的地址举例使用FILE * pFile NULL; //fopen函数以读的形式打开⽂件如果⽂件不存在则打开失败。 pFile fopen (unexist.ent, r); if (pFile NULL) { printf (错误信息是%s\n, strerror(errno)); return 1;//错误返回 } //【main】错误信息是No such file or directory2.5.4 显示错误perrorvoidperror (const char *str ); 头文件string.hperror 函数打印完参数部分的字符串后再打印⼀个冒号和⼀个空格再打印错误信息其使用与strerror相似举例使用FILE * pFile NULL; pFile fopen (unexist.ent, r); if (pFile NULL) { perror(错误信息是); return 1; } //【main】错误信息是: No such file or director3、内存函数1、