建设网站必须用dns,网站备案查询 美橙网,牛网站,南山做网站价格文章目录 #x1f680;前言#x1f680;库函数strlen✈️strlen的模拟实现 #x1f680;库函数strcpy✈️strcpy的模拟实现 #x1f680;strcmp✈️strcmp的模拟实现 #x1f680;strstr✈️strstr的模拟实现 #x1f680;strcat✈️strcat的模拟实现 #x1f680;前言 … 文章目录 前言库函数strlen✈️strlen的模拟实现 库函数strcpy✈️strcpy的模拟实现 strcmp✈️strcmp的模拟实现 strstr✈️strstr的模拟实现 strcat✈️strcat的模拟实现 前言
今天阿辉将为大家介绍字符串库函数strlen、strcpy、strcmp、strstr、strcat的使用以及模拟实现关注阿辉不迷路哦 内容干货满满接下来就跟着阿辉一起学习吧
库函数strlen
库函数strlen是专门求字符串长度的库函数strlen只能求字符串长度且要求字符串末尾须有\0返回值长度不包括\0 strlen的函数声明
size_t strlen(const char* src);
返回值为size_t类型
接受一个字符串的首元素地址即可返回字符串长度例子
#includestdio.h
#includestring.hint main()
{char* a abcdef;//末尾有\0char c[] { a,b,c,d,e,f };//末尾无\0printf(%zd\n, strlen(a));printf(%zd\n, strlen(c));return 0;
}输出 上图我们可以看到一个输出6而一个却是42就是因为常量字符串a末尾有\0而字符串数组c末尾无\0而库函数strlen计算的长度是从字符串首元素到\0之间的元素个数若字符串末尾无\0strlen则会一直向后找到\0位置然后返回。在C语言中\0堪称字符串的灵魂后面几个函数会让大家有更深的体会。
✈️strlen的模拟实现
铁子们咱们直接代码以及详解奉上
size_t my_strlen(const char* src)
{assert(src ! NULL);//断言判断传入指针不为空size_t ret 0;//记录字符串长度作为返回值while (*src)//这句代码下面单独解释{ret;}return ret;
}关于while(*src)这句代码因为后置的优先级更高所以src但是又因为后置实现使用后所以*src这个表达式的值是*src然后src再加1然后当指针src偏移到\0位置时while循环就停止了因为\0的本质就是0 库函数strcpy
库函数strcpy是用来用来拷贝字符串的 strcpy的函数声明
char* strcpy(char* dest, const char* src);
把从src地址开始到\0的字符串复制到以dest开始的地址空间
返回值为拷贝位置起始地址注意
将源指向的 C 字符串复制到目标指向的数组中包括终止空字符并在该点停止源字符串必须以 ‘\0’ 结束。会将源字符串中的 ‘\0’ 拷贝到目标空间。目标空间必须足够大以确保能存放源字符串。目标空间必须可变
例子
int main()
{char a[] abcd;char b[10] { 0 };strcpy(b, a);printf(%s,b);return 0;
}输出
abcd✈️strcpy的模拟实现
char* my_strcpy(char* dest, const char* src)
{char* ret dest;//记下目标位置起始地址assert(dest src);//断言判断传入的指针不为空while (*dest *src){;}return ret;//返回目标位置起始地址
}*dest *src这段代码可以理解为先进行*dest *src 然后dest dest 1; src src 1当src指向\0时\0赋给*dest然后跳出循环
strcmp
库函数strcmp的函数声明
int strcmp(const char* str1, const char* str2);strcmp是用来比较字符串大小的函数但并非是以字符串长度比较的而是从两个字符串的起始位置开始一一对应地进行比较如果它们彼此相等则继续以下对直到字符不同或达到\0字符不同时比较的是ASII值大小 返回值
第一个字符串大于第二个字符串则返回大于0的数字第一个字符串等于第二个字符串则返回0第一个字符串小于第二个字符串则返回小于0的数字
例子
int main()
{char a[] adc;char b[] abcd;int ret strcmp(a, b);printf(%d , ret);return 0;
}输出
1✈️strcmp的模拟实现
int my_strcmp(const char* str1, const char* str2)
{assert(str1 str2);while (*str1 *str2){if (*str1 \0)//两字符串相等同时指向字符串末尾的\0return 0;str1;str2;}return *str1 - *str2;//不等位置相减
}strstr
库函数strstr的函数声明
char* strstr(const char* str1, const char* str2);strstr函数是用来判断主串str1中是否存在子串str2如果存在则返回str1中第一次出现子串的起始位置地址否则返回NULL 阿辉作图给大家展示一下
int main()
{char a[] abcdsfejsl;char b[] dsfe;printf(%s, strstr(a, b));return 0;
}输出
dsfejsl因为返回的是主串中子串起始位置地址上述代码中也就是d位置的地址用%s打印就是dsfejsl这一段
✈️strstr的模拟实现
char* my_strstr(const char* dest, const char* src)
{assert(dest src);//断言判断不为空char* ret dest;//ret作返回值记录主串下一个起始比对位置char* p src;//记录子串的起始位置if (*src \0)//子串为空直接返回主串{return ret;}while (*dest)//遍历到主串\0位置跳出循环{//从主串起始比对位置与子串一一比对while (*dest *src)//不相等时跳出循环{if (*dest \0)//当主串遍历到\0位置还进来说明子串也到末尾\0位置了直接返回主串起始比对位置{return ret;}}if (*src \0)//跳出循环时src已到\0位置说明主串中找到子串返回主串起始比对位置{return ret;}dest ret;//上述if都没进去说明该主串起始比对位置找不到子串ret记录下一个起始比对位置并把值赋给dest从下一个起始比对位置开始遍历src p;//src返回子串起始位置}return NULL;//上述都为返回说明找不到返回空
}铁子们不懂的话下面这幅图还有解释
strcat
库函数strcat的函数声明
char* strcat(char* dest, const char* src);strcat库函数是用来把src所指向的字符串包括\0复制到dest所指向的字符串后面删除*dest原来末尾的\0。要保证*dest足够长以容纳被复制进来的*src。*src中原有的字符不变。返回指向dest的指针 例子
int main()
{char a[20] abc;char b[] dsfe;printf(%s\n, strcat(a, b));return 0;
}输出
abcdsfe✈️strcat的模拟实现
char* my_strcat(char* dest, const char* src)
{assert(dest src);//断言判断不为空char* ret dest;//记录起始地址作为返回值while (*dest)//找到目标字符串\0位置{dest;}while (*dest *src){;}return ret;
}while (*dest *src)这段代码前面大家见得多了实在不理解可以自己敲出来试试这里阿辉复制粘贴一下 *dest *src这段代码可以理解为先进行*dest *src 然后dest dest 1; src src 1当src指向\0时\0赋给*dest然后跳出循环 到这里阿辉今天对于C语言中部分字符函数的分享就结束了希望这篇博客能让大家有所收获, 如果觉得阿辉写得不错的话记得给个赞呗铁子们的支持是我创作的最大动力