🐎作者的话
本文介绍字符串常用的函数如何使用及其模拟实现~
跳跃式目录
- strlen介绍
- strcpy介绍
- strcat介绍
- strcmp介绍
- strncpy介绍
- strncat介绍
- strncmp介绍
- strstr介绍
- strchr介绍
- strrchr介绍
- memcpy介绍
- memmove介绍
- memcmp介绍
- memset介绍
- strtok介绍
strlen介绍
函数原型:strlen(const char* str)
返回值:size_t
用法:将从str开始到’\0’结束这段空间内字符的个数返回,不包含’\0’。
- 返回值是size_ t类型,因此不会出现负数,用于长度比较时需注意.
- strlen模拟实现
法一:循环
法二:递归
法三:指针-指针
效果图:
strcpy介绍
函数原型:strcpy(char* target,const char* source)
返回值:char*
用法:将从source开始,到’\0’结束的字符串,拷贝到target里面(包括’\0’)。
- target空间必须足够大
- target不能是常量字符串(即可以修改)
- strcpy模拟实现
效果图:
strcat介绍
函数原型:strcat(char* target,const char* source)
返回值:char*
用法:将从source开始到’\0’结束的字符串接到target的’\0’后面(该’\0’也被替换)
- 目标函数需要有足够的空间
- 目标空间不能是常量字符串(即可以修改)
- 两个字符串必须有’\0’
- strcat模拟实现
一:普通实现
效果图:
二:创新实现,自己拼接自己
strcmp介绍
函数原型:strcmp(const char* str1,const char* str2)
返回值:int
用法:按照ASCII码依次比较,1>2则返回正数,1<2则返回负数,相等返回0.
- 在VS中正数返回1,负数返回-1
- 但不是所有编译器都是这样
- 判断时最好不用1或-1
- strcmp模拟实现
此处即可用双方都不是’\0’判断,也可以用双方是否相等判断
strncpy介绍
函数原型:strncpy(char* target,const char* source,unsigned int n)
返回值:char*
用法:将source起n个字符拷贝到target中。
- 若n大于source的长度,多出来的默认拷贝’\0(会改变字符串结束位置)
- strncpy模拟实现
效果图:
strncat介绍
函数原型:strncat(char* target,const char* source,unsigned n)
返回值:char*
用法:把source起的n个字符接到target后面,第一个’\0’被替换,会在最后再补一个’\0’。
- 若n大于source的长度,则多出来的默认接入’\0’.
- strncat模拟实现
效果图:
strncmp介绍
函数原型:strncmp(const char* str1,const char* str2,unsigend n)
返回值:int
用法:对str1和str2的前n个进行比较,不足默认为’\0’
- strncmp模拟实现
效果图:
strstr介绍
函数原型:strstr(const char* arr1, const char* arr2)
返回值:char*
用法:在arr1里面寻找第一个出现的arr2,返回第一次出现的首元素地址
- 若arr2大于arr1,返回null
- 若arr2的长度和arr1相等,用strcmp判断
- strstr模拟实现
先排除特殊情况,随后判断
strchr介绍
函数原型:strchr(const char* str,char c)
返回值:char*
用法:找到str中第一次出现c的位置,返回地址。
- strchr模拟实现
strrchr介绍
函数原型:strrchr(const char* str,char c)
返回值:char*
用法:返回str中最后一次出现c的位置。
- strrchr模拟实现
memcpy介绍
函数原型:memcpy(void* target,const void* source,unsigned n)
返回值:void*
用法:内存拷贝
- 拷贝n个字节,不论什么类型,低位开始访问
- 若自己拷贝自己,请用memmove
- memcpy模拟实现
memmove介绍
函数原型:memcpy(void* target,const void* source,unsigned n)
返回值:void*
用法:memcpy的自身拷贝自身用法
- memmove是momcpy的上位替代,可以避免自身拷贝时的重叠现象
- 如果程序需要重叠呢?
- VS现在标准库里memcpy和memmove已经一样了.
- mommove模拟实现
memcmp介绍
函数原型:my_memcmp(const void* data1, const void* data2,unsigned n)
返回值:int
用法:和str相同,从前往后按字典序比较
- memcmp模拟实现
memset介绍
函数原型:memset(void* arr,int n,unsigned t)
返回值:void*
将arr的前t个字节设置为n
- memset模拟实现
strtok介绍
函数原型:strtok(const char* str1,const char* str2)
返回值:char*
用法:检索arr1中每个出现的arr2中的字符,并将他们分成多个字符串.
- 过于简单 在此不再展示代码~
📖博客主页:咚咚小圆帽的CSDN主页
🎁感谢您的:👍点赞⭐️收藏❤️关注🔗转发~
📚所属专栏:C语言进阶
📑相关文章:
🔖今日寄语: 加油~
⚠️本文由咚咚小圆帽于2023年1月14日在CSDN原创首发
🌏欢迎各位指出错误,非常感谢~