字符串函数模拟实现

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;

}


评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值