模拟实现字符串操作函数
来源:互联网 发布:盘古数据 招聘 编辑:程序博客网 时间:2024/05/29 03:52
模拟实现1.strcpy 2.strcat 3.strstr 4.strchr 5.strcmp 6.memcpy 7.memmove
2.strcat 目标字符串末尾拼接字符串
4.strchr 在目标字符串中查找指定字符的位置,若找到则返回指向第一次出现指定字符的指针,若找不到返回NULL。
返回值
请多指正啦~
1.strcpy:将源字符串拷贝到目标字符串中
注意检查所传指针的有效性,源字符串中的‘\0’也一同拷贝。
char *my_strcpy(char *dest,const char *src){char *ret = dest;//先保存一个指向第一个字符的指针assert(dest);assert(src);while((*dest++ = *src++)){;}return ret;}
2.strcat 目标字符串末尾拼接字符串
char *my_strcat( char *dest,const char *src){char *ret = dest;assert(dest);assert(src);while(*dest){dest++;//dest没到最后}while(*dest++ = *src++){;//dest到了最后}return ret;}
3.strstr 在目标字符串中查找子串并返回一个指向子串在目标字符串中第一次出现的位置的指针,
若没找到则返回NULL
char *my_strstr(const char *dest,const char *src){char *cp = (char *)dest;char *substr = (char *)src;char *p = NULL;assert(dest);assert(src);if(*src == '\0'){return NULL;}while(*cp){p = cp;substr = src;while(*p && *substr && (*p == *substr)){p++;substr++;//1.循环在p中找,后一个是不是也是substr中的2.都不为‘\0’接着向后}if(*substr == '\0')return cp;cp++;//没有相同的cp向后}return NULL;//没找到}
4.strchr 在目标字符串中查找指定字符的位置,若找到则返回指向第一次出现指定字符的指针,若找不到返回NULL。
char *my_strchr(const char *dest,int c){assert(dest);while(*dest != '\0'){if(*dest == c){return dest;}dest++;}return NULL;}
返回值
<0 字符串1小于字符串2(不一定是-1)
=0两字符串相等
>0 字符串1大于字符串2(不一定是1)
int my_strcmp(const char*src,const char *dest){assert(src);assert(dest);while(*dest == *src)//dest和src都没到末尾或遇到相等的元素{if(*src == '\0'){return 0;}dest++;src++;}if(*src >*dest)return 1;elsereturn -1;}
5.memcpy 在缓冲区中按字节拷贝。
注意void *要转为(char *)。
void *my_memcpy(void *dest,const void *src,size_t count){void *ret = dest;while(count--){*(char *)dest = *(char *)src;dest = (char *)dest +1;src = (char *)src +1;}return ret;}
6.memmove 从src开始连续拷贝count个字节到dest中作用与memcpy相同,
但当内存局部重叠(特别是第二种情况)时memmove就能保证拷贝结果正确,而memcpy则不能。
因为内存重叠src最右的两个字节会被覆盖,不能正常拷贝。故采用从后向前拷贝的方式。
void *my_memmove(void *dest,const void*src,size_t count){void *ret = dest;char *ptr_dest = (char *)dest;const char *ptr_src = (const char *)src;if(dest <= src || (char *)dest >= (char *)src+count){while(count--){*ptr_dest++ = *ptr_src++;}}else if(ptr_src>ptr_dest)//从后向前拷贝{ptr_src += count - 1;ptr_dest += count - 1;while(count--){*ptr_dest-- = *ptr_src--;}}return dest;}
请多指正啦~
阅读全文
0 0
- 模拟实现字符串操作函数
- 字符串操作函数模拟实现
- 模拟实现字符串操作函数
- 字符串操作函数模拟实现大全
- 模拟实现各类字符串查找操作函数
- C语言模拟实现字符串操作函数
- 一些字符串操作函数的模拟实现
- 字符串函数模拟实现
- 字符串函数模拟实现
- 字符串函数模拟实现
- 字符串操作函数的模拟
- 模拟实现常用字符串函数
- 模拟实现部分字符串函数
- 字符串函数的模拟实现
- 字符串操作函数实现
- 字符串操作函数实现
- 模拟实现strncat函数(字符串追加函数)
- 字符串操作函数模拟之番外篇
- 国内docker hub的加速镜像服务
- Android Svg
- android画了一个笑脸
- [BZOJ4012]开店 点分治+STL
- MSSQL日期时间函数大全
- 模拟实现字符串操作函数
- 批量将本地sql导入到服务器mysql数据库中,和将服务器中的sql导出到本地
- 前端小白--导航(一)
- strcpy和strcpy_s
- fastjson泛型的使用
- Tomcat NioEndpoint的SocketProcessor
- 我国科学家在暗物质探测方面取得重要进展
- PreparedStatement 使用like 模糊查询
- 科学界奥斯卡奖获奖名单揭晓 奖金达2200万美元