作业
1.实现strcpy
2.实现strcat
3.实现strstr
4.实现strchr
5.实现strcmp
6.实现memcpy
7.实现memmove
1.
//模拟strcpy
#include <stdio.h>
#include <windows.h>
#include <assert.h>
char *my_strcpy(char *dest,const char *src)
{
char *ret=dest;
assert(dest);
assert(src);
while(*dest++=*src++)
{
;
}
return ret;
}
int main()
{
char arr1[]="abcdef";
char arr2[]="123456";
printf("%s\n",my_strcpy(arr1,arr2));
system("pause");
return 0;
}
2.
//.模拟strcat
#include <stdio.h>
#include <windows.h>
#include <assert.h>
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[]="abcdef";
char arr2[]="123456";
printf("%s\n",my_strcat(arr1,arr2));
system("pause");
return 0;
}
3.
//模拟strstr(寻找子串)
#include <stdio.h>
#include <windows.h>
#include <assert.h>
char *my_strstr(char *arr1, const char *arr2)
{
assert(arr1);
assert(arr2);
char *s1=(char *) arr1;
char *s2=(char *) arr2;
char *ret=NULL;
if(*arr2=='\0')
{
return NULL;
}
while(*s1)
{
ret=s1;
s2=(char *)arr2;
while(*ret&&*s2&&(*ret==*s2))
{
ret++,s2++;
}
if(*s2=='\0')
{
return s2;
}
s1++;
}
}
int main()
{
char arr1[]="abcdef123abc";
char arr2[]="abc";
// printf("");
char *pd=my_strstr(arr1,arr2);
if(pd!=NULL)
{
printf(yes!\n ");
}
else
printf("no!\n");
system("pause");
return 0;
}
4.
//.模拟strchr
#include <stdio.h>
#include <windows.h>
#include <assert.h>
char *my_strstr(char *arr1, const char *arr2)
{
assert(arr1);
assert(arr2);
char *s1=(char *) arr1;
char *s2=(char *) arr2;
char *ret=NULL;
if(*arr2=='\0')
{
return NULL;
}
while(*s1)
{
ret=s1;
s2=(char *)arr2;
while(*ret&&*s2&&(*ret==*s2))
{
ret++,s2++;
}
if(*s2=='\0')
{
return s2;
}
s1++;
}
}
int main()
{
char arr1[]="abcdef123abc";
char arr2[]="abc";
// printf("");
char *pd=my_strstr(arr1,arr2);
if(pd!=NULL)
{
printf("找到了!\n ");
}
else
printf("没找到!\n");
system("pause");
return 0;
}
5.
//模拟strcmp
#include <stdio.h>
#include <windows.h>
#include <assert.h>
int my_strcmp(char *src,const char *dst)
{
assert(dst);
assert(src);
int ret=0;
while(!(ret=*(unsigned char *)src-*(unsigned char *)dst)&&*dst)
{
++src,++dst;
}
if(ret<0)
ret=-1;
else if(ret>0)
ret=1;
return (ret);
}
int main()
{
char arr1[]="abcdef";
char arr2[]="ab";
int ret=my_strcmp(arr1,arr2);
if(ret)
{
printf("第一个\n");
}
else
{
printf("第二个\n");
}
system("pause");
return 0;
}
6.
//.实现memcpy
#include <stdio.h>
#include <windows.h>
#include <assert.h>
void *my_memcpy(void *dst,const void *src,size_t count)
{
assert(dst);
assert(src);
void *ret=dst;
while(count--)
{
*(char *)dst=*(char *)src;
dst=(char *)dst+1;
src=(char *)src+1;
}
return (ret);
}
int main()
{
char arr1[]="abcdef";
char arr2[]="123456";
printf("%s\n",my_memcpy(arr1,arr2,3));
system("pause");
return 0;
}
7.
//.实现memmove
#include <stdio.h>
#include <windows.h>
#include <assert.h>
void *my_memmove(void *dst,const void *src,size_t count)
{
assert(dst);
assert(src);
void *ret=dst;
if(dst<src||(char *)dst>=((char *)src+count)) //从左往右拷贝
{
while(count--)
{
*(char *)dst=*(char *)src;
dst=(char *)dst+1;
src=(char *)src+1;
}
}
else //从有开始拷贝
{
dst=(char *)dst+count-1;
src=(char *)src+count-1;
while(count--)
{
*(char *)dst=*(char *)src;
dst=(char *)dst-1;
src=(char *)src-1;
}
}
return (ret);
}
int main()
{
char arr1[]="abcdfgh";
char arr2[]="123456";
printf("%s\n",my_memmove(arr1,arr2,5));
system("pause");
return 0;
}