码海拾遗:strstr()和strcpy()实现
Posted 落雷
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了码海拾遗:strstr()和strcpy()实现相关的知识,希望对你有一定的参考价值。
1、strstr()实现
原型:char * strstr(const char * str1, const char * str2)
说明:判断str2是否为str1的子串,如果是则返回str2第一次出现的位置,否则返回NULL
实现:
1 char * strstr(const char * str1, const char * str2) 2 { 3 if (NULL == str1 || NULL == str2) 4 return NULL; 5 6 while (*str1++ != ‘\0‘) 7 { 8 for (int i = 0; *(str1 + i) == *(str2 + i); ++i) 9 if (*(str2 + i + 1) == ‘\0‘) 10 return (char*)str1; 11 } 12 return NULL; 13 }
2、strcpy实现
原型:char* strcpy(char *dst, const char *src)
说明:把从src地址开始且含有‘\0‘结束符的字符串复制到以dest开始的地址空间
实现:
1 char * memcpy(char * dst, const char * src, unsigned len) 2 { 3 if (NULL == dst || NULL == src) 4 return NULL; 5 6 char *rtn = dst; 7 8 if (dst >= src && dst <= src + len - 1)//考虑到可能出现部分地址重叠 9 { 10 src += len - 1; 11 dst += len - 1; 12 while (len--) 13 *dst-- = *src--; 14 } 15 else 16 while (len--) 17 *dst++ = *src++; 18 19 return rtn; 20 } 21 22 unsigned strlen(const char *str) 23 { 24 if (NULL == str) 25 return -1; 26 27 unsigned len = 0; 28 while (*str++ != ‘\0‘) 29 len++; 30 31 return len; 32 } 33 34 char* strcpy(char *dst, const char *src) 35 { 36 if (NULL == dst || NULL == src) 37 return NULL; 38 39 char *rtn = dst; 40 memcpy(dst, src, strlen(src)+1); 41 /*等同于 42 memcpy(dst, src, strlen(src)); 43 dst[strlen(src)] = ‘\0‘; 44 */ 45 return rtn; 46 }
PS: 既然是自己实现这两个函数,就不用C标准提供的函数了
以上是关于码海拾遗:strstr()和strcpy()实现的主要内容,如果未能解决你的问题,请参考以下文章