模拟实现strcpy,strcmp,strcat,strstr.strlen
测试
发布日期:2021-09-19 03:18:16
浏览次数:4
分类:技术文章
本文共 2205 字,大约阅读时间需要 7 分钟。
strcpy函数实现
strcpy :字符串拷贝函数, 函数原型 char* strcpy(char* dest,char* src) 从stc的起始地址开始,到'\0'结束。 所以dest必须有足够的空间来容纳src。头文件#include<string.h>
char* my_strcpy(char* dest, const char* src){ assert(dest); assert(src); char* ret = dest; while ((*dest++) = (*src++)) { ; } return ret;}测试部分
int main(){ char arr[20]; char* str= "hello "; char* ret = my_strcpy(arr, str); printf("%s\n", ret); system("pause"); return 0;}
strcat函数实现
strcat :字符串连接函数 ,把src指向的字符串添加到dest后,(src直接覆盖dest结尾处的‘\0’) 原型 char* strcat(char *dest,const char* src); 头文件#include<string>
注意事项: dest和src俩块空间不能有重叠部分,dest必须有足够大的空间来容纳srt,返回dest的指针
char* my_strcat(char* dest, const char* src){ char* ret = dest; assert(dest); assert(src); while (*dest) { *dest++; } while (*dest++ = *src++) { ; } return ret;}测试部分
int main(){ char arr1[20] = "hello"; char arr2[] = "sust"; char* ret = my_strcat(arr1, arr2); printf("%s\n", ret); system("pause"); return 0;}arr1 的空间一定要足够大
strcmp函数实现
strcmp:字符串比较函数,俩个字符串自左向右逐个字符比较(按ASCIIZ值的大小比较)直到出现不同的字符或者‘\0’。若这俩个字符串为str1,str2,
若str1==str2,返回0;
若str1>str2 ,返回正数;
若str1<str2,返回负数;
int my_strcmp(const char* dest,const char* src){ int ret = 0; while (*dest == *src) { if (*dest == '\0') { return 0; } *dest++; *src++; } return *dest - *src;}测试
int main(){ char arr1[10] = "sust"; char arr2[10] = "sust"; int ret = my_strcmp(arr1, arr2); printf("%d\n", ret); system("pause"); return 0;}
strstr函数实现
strstr:在字符串中找子串 char* strstr(char* str1,char * str2) 在str1中找str2,如果找到了返回strp2在str1中首次出现的地址,如果没找到返回NULL。
char* my_strstr(const char* str1, const char* str2){ char *cp = (char*)str1; char *substr = (char*)str2; char *s1 = str1; assert(str1); assert(str2); if (*str2 == '\0') return NULL; while (*cp) { s1 = cp; substr = str2; while (*s1&&*substr && (*s1 == *substr)) { s1++; substr++; } if (*substr == '\0') return cp; cp++; }}
strlen函数实现
strlen:求字符串长度函数,从开始直到遇到'\0'结束,返回计数器的值不包含‘\0 ’;
法一:
int my_strlen(const char *str){ int count = 0; while (*str) { count++; str++; } return count;}法二:递归法
int my_strlen(const char *str){ if (*str=='\0') return 0; else return 1 + my_strlen(str + 1);}
int main(){ char arr[10] = "hello"; int ret = my_strlen(arr); printf("%d\n", ret); system("pause"); return 0;}
转载地址:https://blog.csdn.net/audience_fzn/article/details/76794358 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
哈哈,博客排版真的漂亮呢~
[***.90.31.176]2024年03月31日 17时27分23秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
IDEA SpringMVC Tomcat 404 一网打尽 及路径问题汇总【踩坑记录】
2019-04-26
VTK:几何对象之PolyLine
2019-04-26
VTK:绘图之ChartMatrix
2019-04-26
VTK:绘图之StackedBar
2019-04-26
【题解】1122 Hamiltonian Cycle (25分)⭐⭐⭐ 【哈密顿回路】
2019-04-26
VTK:绘图之StackedPlot
2019-04-26
VTK:绘图之SurfacePlot
2019-04-26
VTK:Points之CompareExtractSurface
2019-04-26
VTK:Points之DensifyPoints
2019-04-26
VTK:Points之ExtractClusters
2019-04-26
VTK:Points之ExtractEnclosedPoints
2019-04-26
VTK:Points之ExtractPointsDemo
2019-04-26
VTK:Points之ExtractSurface
2019-04-26
VTK:Points之ExtractSurfaceDemo
2019-04-26
DCMTK:测试ConcatenationCreator类
2019-04-26
DCMTK:CT采集类型FG类的测试
2019-04-26
DCMTK:CT采集类型FG类的测试
2019-04-26
DCMTK:测试CT像框FG类
2019-04-26
退役贴 弱校选手ACM拓荒生涯回顾【致敬弱校选手】
2019-04-26
DCMTK:CT位置FG类测试
2019-04-26