码海拾遗:strstr()、strcmp()和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、strcmp实现
原型:int strcmp(const char *s1,const char *s2);
说明:比较字符串s1和s2的大小,如果s1>s2 ,返回大于0的整数,如果s1==s2 ,返回0,如果s1<s2,返回小于0的整数。
实现:
1 int strcmp(const char *s1, const char *s2) 2 { 3 while (*s1 && *s2 && (*s1 == *s2)) 4 { 5 s1++; 6 s2++; 7 } 8 return ((unsigned char*)s1 - (unsigned char*)s2); 9 }
3、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标准提供的函数了
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具