1.strcpy(dest,src):把从src地址开始且含有NULL结束符的字符串复制到以dest开始的地址空间中,而且src和dest所指内存区域不可以重叠。
#include "stdio.h"
#include "assert.h"
char * my_strcpy(char *dst, const char *src)
{
char *tmp = dst;
assert(dst!=NULL);
assert(src!=NULL);
while (*dst++=*src++)
{
;
}
return tmp;
}
int main()
{
char arr[40] = { 0 };
printf("%s\n", my_strcpy(arr, "haha"));
system("pause");
return 0;
}
2.实现strcat
strcat(dest,src):把src所指字符串添加到dest结尾处(覆盖dest结尾处的‘\0’),src和dest所指内存区域不可以重叠,所以dest必须有足够的空间来容纳。
#include "stdio.h"
#include "assert.h"
#include"windows.h"
char * my_strcat(char *dst, const char *src)
{
char *tmp = dst;
assert(dst!=NULL);
assert(src!=NULL);
while (*dst!="\0")//此循环不包括“\0”
{
dst++;
}
while((*dst++ =*src++))//将src赋给dst,遇到、“\0”停止
{
;
}
return tmp;//返回的是指向dst的指针
}
int main()
{
char arr1[40] = "haha";
char arr2 = "ha";
printf("%s\n", my_strcat(arr1, arr2));
system("pause");
return 0;
}
3. 实现strstr
#include "stdio.h"
#include "assert.h"
#include"string.h"
char * my_strstr( char *str1,char *str2)
{
assert(str1!=NULL);
assert(str2!=NULL);
char *p1 = (char*)str1;//强转成char型,这样才能一个个字符的进行处理
char *p2 = (char*)str2;
char *tmp=NULL;
if (*str2 == '\0')
{
return NULL;
}
while (*p1)
{
tmp = p1;
p2 = str2;
while (*tmp && *p2 && (*tmp == *p2))
{
tmp++;
p2++;
}
if (*p2 == '\0')
return p1;
p1++;
}
}
int main()
{
char arr1 = "hahahehe";
char arr2="he";
printf("%s\n", my_strstr(arr1, arr2));
system("pause");
return 0;
}
5.实现strcmp
#include "stdio.h"
#include "assert.h"
#include"string.h"
int * my_strcmp( char *str1,char *str2)
{
assert(str1!=NULL);
assert(str2!=NULL);
while (*str1++ == *str2++)
{
if (*str1 == '\0')
return 0;
}
return *str1 - *str2;
}
int main()
{
char arr1 = "hahahehe";
char arr2="hahaheha";
int ret = 0;
printf("%d\n", my_strcmp(arr1, arr2));
system("pause");
return 0;
}
6.实现memcpy
#include "stdio.h"
#include "assert.h"
#include"string.h"
void * my_memcpy( void *str1,const void *str2,int count)
{
assert(str1!=NULL);
assert(str2!=NULL);
void *tmp = str1;
char *p1 = (char*)str1;//p1指向char型str1
char *p2 = (char*)str2;//p2指向char型str2
while (count--)
{
p1 = p2;
str1 = p1 + 1;//向后移一位
str2 = p2 + 1;//向后移一个字符
}
return tmp;
}
int main()
{
char arr1[40] = { 0 };
char arr2[]= "haha";
int sz = sizeof(arr2) / sizeof(arr2[0]);
printf("%s\n", my_memcpy(arr1,arr2,sz ));
system("pause");
return 0;
}
7. 实现memmove
#include "stdio.h"
#include "assert.h"
#include"string.h"
void * my_memmove( void *str1,const void *str2,int count)
{
assert(str1!=NULL);
assert(str2!=NULL);
void *tmp = str1;
char *p1 = (char*)str1;//p1指向char型str1
char *p2 = (char*)str2;//p2指向char型str2
while (count--)
{
if (str2<str1&&(p2+ count)>str1)//从右至左
{
*(p1 + count - 1 )= *(p2 + count - 1);
count--;
}
else//从左至右
{
*p1 = *p2;
p1++;
p2++;
}
}
return tmp;
}
int main()
{
char arr1[40] = { 0 };
char arr2[]= "haha";
int sz = sizeof(arr2) / sizeof(arr2[0]);
printf("%s\n", my_memmove(arr1,arr2,sz ));
system("pause");
return 0;
}