资讯动态

常用的字符函数和字符串函数

发布时间:2026/10/1 18:25:12 来源:尧图企业网站定制
目录一.一个参数的字符函数1.字符分类函数2.字符转换函数二.两个参数 长度不受限的字符串函数1.strcpy函数2.strcat函数3.strcmp函数三.三个参数 长度受限的字符串函数1.strncpy函数2.strncat函数3.strncmp函数四.其他字符串函数1.strstr函数2.strlen函数3.strtok函数4.strerror函数一.一个参数的字符函数1.字符分类函数用于判断字符的类型专门用于字符分类。需包含头文件ctpye.h例如isalpha判断参数是否是字母isdigit 判断参数是否是数字符合条件返回真不符合返回假。2.字符转换函数int tolower(int c);//将参数从大写转为小写 int touppper(int c);//将参数从小写转为大写用于转换大小写。二.两个参数 长度不受限的字符串函数1.strcpy函数char* strcpy(char* destination,const char* source); char arr1[] abc; char arr2[10] {0}; strcpy(arr2,arr1);strcpy用于拷贝字符串将 arr1(source) 的字符串拷入 arr2(destination)。注意源字符串必须以 ‘\0’ 结尾。会将源字符串的 ‘\0’ 拷入目标空间。目标空间必须足够大 确保能放入拷贝的字符串。目标空间必须可修改。const char* destination//error 目标空间此时不能修改 char* p abcd;//error 常量字符串不能被修改 p为指针 指向首字符的地址 char* p[10] abcd;//此时 p为数组名 数组中存放字符串 可修改模拟实现char*my_strcpy(char*dest,constchar*src){assert(destsrc);//确保两个指针非空char*resdest;while(*dest*src)//后先用再加{//通过赋值拷贝数据 将\0赋值给dest后表达式为 0while终止循环;//空语句}returnres;//返回目标空间的起始地址}2.strcat函数和strcpy函数很像strcpy从开头覆盖到’\0’结束strcat从结尾’\0’开始覆盖 直到整个源字符串追加完成。strcpy 是替换strcat 是追加。注意源字符串必须以 ‘\0’ 结尾。从目标字符串的 ‘\0’ 开始追加 ‘\0’被覆盖将源字符串整体拷入包括’\0’。目标空间必须足够大 确保能放入源字符串。目标空间必须可修改。模拟实现char*my_strcat(char*dest,constchar*src){assert(destsrc);//确保两个指针非空char*resdest;while(*dest)//找到\0 不用再加了{dest;}while(*dest*src)//dest从\0开始 通过赋值拷贝数据{;//空语句}returnres;//返回目标空间的起始地址}strcat函数的模拟实现 相比 strcpy 只多了一个找’\0’的while循环。3.strcmp函数用于比较两个字符的大小。int strcmp(const char* str1, const char* str2); int res strcmp(abc,abcd);//0从左到右比较字符的ASCII码大小字符相同则比较下一个字符直到得出结果ASCII码值小 则小返回值小于0ASCII码值大返回值大于0。如果完全相同返回 0。\0’也参与比较 其ASCII码值为 0。if(abc abcd)//error ...直接让两个字符比较比较的是两个字符串首字符的地址 而不是字符串的内容。模拟实现intmy_strcmp(constchar*str1,constchar*str2){assert(str1str2);while(*str1*str2){if(*str1\0)//两个字符串均为\0return0;//相等str1;str2;}return*str1-*str2;//如果str1str2 返回值0//如果str1str2 返回值0}三.三个参数 长度受限的字符串函数1.strncpy函数char arr1[] abc; char arr2[10] xxxxxxx; //strcpy(arr2,arr1);abc\0xxx //strncpy(arr2,arr1,3);abcxxxx (只覆盖前3位 没有\0) strncpy(arr2,arr1,5);//abc\0\0xx (位数不够补\0)可以自行决定拷贝的个数。2.strncat函数char arr1[] abc; char arr2[10] qq\0xxxxxxx; strncat(arr2,arr1,2);//qqab\0xxxxxxx可以自行决定追加的个数。覆盖’\0’追加完成后再加回一个’\0’。3.strncmp函数char str1[] abc; char str2[] abe; strncmp(str1, str2, 2);//0 相等可以自行决定比较的字符数。四.其他字符串函数1.strstr函数string string 在字符串中找字符串子字符串。char* strstr(const char* str1, const char* str2);在str1中找str2是否存在如果存在 返回str1中 str2首字符出现的地址找不到则返回NULL。模拟实现constchar*my_strstr(constchar*str1,constchar*str2){constchar*s1NULL;constchar*s2NULL;constchar*curstr1;while(*cur){s1cur;s2str2;while(*s1*s2*s1!\0*s2!\0)//找到字符 且未结束{s1;s2;}if(*s2\0)//str2已被找到returncur;//返回起始地址cur;//如果 *s1\0大循环结束*s2\0 已找到//*s1!*s2 未找到cur1 继续找 直到找到或者找不到}}2.strlen函数size_t strlen(const char*str);用于获取字符串的长度。检测 ‘\0’ 前的字符个数。注意参数指向的字符串必须包含 ‘\0’ 。需包含头文件 string.h 。返回值类型为 size_t (无符号)。if(strlen(ab)-strlen(abcd)0)printf(1);elseprintf(0);表面看 2 - 4 -2打印结果应为 0但实际打印结果为 1。因为该函数的返回值类型为 size_t 无符号-2的补码会被当做一个非常大的正数输出因此打印 1。3.strtok函数char* strtok(char*str, const char* sep);因为字符串内容会被strtok函数改变字符串一般都是副本 且可以修改。char str[] abccde.qwe; char temp[20] {0}; strcpy(temp, str);sep指向一个字符串这个字符串是分割符字符的集合。str指向的字符串 包含sep指向的字符串中的分隔符这个分隔符记为标记。const char* sep .;//两个分隔符标记 和 .strtok函数会找到这个标记将其变为’\0’并返回指向这个标记的指针。char* p strtok(temp, sep);//返回第一个标记的地址 赋给p p strtok(NULL,sep);//查找下一个标记如果 str ! NULL 函数将找到字符串的第一个标记并保存它的位置地址。如果 str NULL函数将从被保存的位置开始查找下一个标记。如果标记被找完返回NULL。也可以如下编写程序char* p NULL;//定义一个指针并置于NULL 防止野指针出现 for(p strtok(temp, sep); p!NULL; p strtok(NULL, sep)) { printf(%s ,p);//打印结果 } //abc\0cde\0qwestrtok函数从被保存位置开始找下一个标记运用了static。4.strerror函数在C语言中库函数调用失败会记录错误码错误码存放在全局变量errno中。在头文件 errno.h 中有说明。char* strerror(int errnum);函数可以把参数部分错误码 对应的字符串信息的地址返回来。每一个数字错误码对应了一条错误信息这个信息也是字符串具有地址。没有错误时 errno为 0有错误时 errno存放错误相关的错误码使用strerror函数将具体的错误信息地址带回 用printf函数打印展现。char* p strerror(1); printf(%s, p); perror(hello);// hello: ...(错误信息)perror 相当于 printf strerror自定义信息xxxxx(错误信息)。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑