您的位置:首页 > 其它

strcpy,strcat,strcmp,strstr的模拟实现

2018-04-01 23:17 316 查看
用my_strcpy、my_strcat、my_strcmp、my_strstr这四个函数来分别模拟实现库函数strcpy、strcat、strcmp、strstr。

1.strcpy

strcpy(dest,src)函数是把从src地址开始且含有NULL结束符的字符串复制到以dest开始的地址空间中,而且src和dest所指内存区域不可以重叠。这就要求dest必须有足够的空间来容纳src的字符串。

思路:对src字符串一个一个进行拷贝,当遇到NULL时,dest停止拷贝。

char* my_strcpy(char *dest,const char *src)
{
char *cp=dest;
assert(src && dest);
while(*dest++=*src++)
{
;
}
return cp;
}

int main()
{
char arr[80]={0};
printf("string=%s\n",my_strcpy(arr,"hello world"));
return 0;
}


结果:hello world

2.strcat

strcat(dest,src)是把src所指字符串添加到dest结尾处(覆盖dest结尾处的‘\0’),src和dest所指内存区域不可以重叠,所以dest必须有足够的空间来容纳。最后结果返回的是指向dest的指针。

思路:先将dest最后一个字符的地址记录下来,然后将src拷贝,即追加上去。

char* my_strcat(char* dest,char* src)
{
char *cp=dest;
assert(src && dest);
while
a95b
(*dest!='\0')
{
dest++;
}
while(*dest++=*src++)
{
;
}
return cp;
}

int main()
{
char arr1[15]="abcd";
char *arr2="ef";
printf("%s\n",my_strcat(arr1,arr2));
return 0;
}


结果:abcdef

3.strcmp

strcmp(str1,str2)是用来比较两个字符串的,设这两个字符串为str1,str2,若str1=str2,则返回零;若str1 < str2,则返回负数;若str1>str2,则返回正数。例如:abcd>abcc。

思路:把两个字符串一个一个进行比较,当两个字符串不一样时,直接减,当两个字符串相等时,直接输出0。

int my_strcmp(char* arr1,char* arr2)
{
assert(arr1 && arr2)
while(*arr1==*arr2)
{
if(*arr1=='\0')
return 0;
}
return *arr1-*arr2;
}

int main()
{
char *arr1="abcde";
char *arr2="abcd";
int ret=my_strcmp(arr1,arr2);
printf("%d\n",ret);
}


结果:101

4.strstr

函数的定义:char* my_strstr(const char* dest,const char*src){}。其中,dest指向的是目标字符串,也就是你需要比较的字符串,src指向的是源字符串,也就是用来被比较的字符串。找不到就可以返回一个空指针。

思路:可以建立两个指针,通过遍历的方式逐个访问字符串,并对这两个指针一一比较。

char *my_strstr(char *s1,const char*s2)
{
int n;
printf("%x\n",s1);
if(*s2)
{
while(*s1)
{
for(n=0;*(s1+n)==*(s2+n);n++)
{
if(!*(s2+n+1))
return(char*)s1;
}
s1++;
}
return NULL;
}
else
printf("LLHH!\n");
return (char*)s1;
}

//test
void main()
{
char aa[20]="aabb";
char *bb="bb";
char *cc;
cc=my_strstr(aa,bb);
printf("%x\n",cc);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: