您的位置:首页 > 其它

str函数的实现以及memcpy和memmove函数的实现

2016-04-12 12:53 302 查看
实现strlen函数

#include<stdio.h>

int my_strlen(const char*arr)//递归实现

{

if(*arr)

{

return 1+my_strlen(arr+1);

}

else

return 0;

}

int my_strlen(const char*arr)//计数器实现

{

int count = 0;

while(*arr)

{

count++;

arr++;

}

return count;

}

int my_strlen(const char*arr)//指针的实现

{

const char*start = arr;

while(*arr)

{

arr++;

}

return arr-start;

}

int main()

{

char arr[] = "abcdef";

int len = my_strlen(arr);

printf("%d\n",len);

return 0;

}

实现strcat函数

#include <stdio.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 dest[20] = "hello ";

char src[] = "bit!";

my_strcat(dest,src);

printf("%s\n",dest);

return 0;

}

strstr函数的实现

#include <stdio.h>

#include <assert.h>

const char* my_strstr(const char*dest,const char*src)

{

const char *str1 = dest;

const char *str2 = src;

const char *start = NULL;

assert(dest);

assert(src);

if(*str2 == '\0')

{

return str1;

}

while(*str1)

{

start = str1;

while((*str1)&&(*str2)&&(*str1 == *str2))

{

str1++;

str2++;

}

if(*str2 == '\0')

{

return start;

}

str2 = src;

str1 = start + 1;

}

return NULL;

}

int main()

{

char dest[] = "abbcbbcdef";

char src[] = "bcd";

const char *p = NULL;

p = my_strstr(dest,src);

if(p == NULL)

printf("no exist");

else

printf("%s\n",p);

return 0;

}

strcpy的实现

#include <stdio.h>

#include <assert.h>

char *my_strcpy(char *str1,const char *str2)

{

assert(str1);

assert(str2);

while(*str1++ = *str2++)

{

;

}

return str1;

}

int main()

{

char dest[] = "hello";

char src[] = "worl";

char *p = NULL;

p = my_strcpy(dest,src);

printf("%s\n",dest);

return 0;

}

strcmp的实现

#include <stdio.h>

#include <assert.h>

int my_strcmp(const char *str1,const char *str2)

{

assert(str1);

assert(str2);

while(*str1 == *str2)

{

if(*str2 == '\0')

return 0;

str1++;

str2++;

}

return *str1-*str2;

}

int main()

{

char *str1 = "abcdefg";

char *str2 = "abcdef";

int ret = my_strcmp(str1,str2);

if(ret == 0)

{

printf("str1 = str2");

}

else if(ret > 0)

{

printf("str1 > str2");

}

else

{

printf("str1 < str2");

}

return 0;

}

memcpy的实现

#include <stdio.h>

#include <assert.h>

void *my_memcpy(void *dest,const void *src,int count)

{

void *pret = dest;

char *str1 = (char *)dest;

const char *str2 = (const char *)src;

int i = 0;

assert(dest);

assert(src);

for(i = 0; i < count; i++)

{

*str1++ = *str2++;

}

return pret;

}

int main()

{

int arr1[] = {1,2,3,4,5};

int arr2[] = {6,7,8,9,0};

int i = 0;

int sz = sizeof(arr1)/sizeof(arr1[0]);

my_memcpy(arr1,arr2,5*sizeof(int));

for(i = 0; i < sz; i++)

{

printf("%d\n",arr1[i]);

}

return 0;

}

memmove的实现

#include <stdio.h>

#include <assert.h>

void *my_memmove(void *dest,const void *src,int count)

{

void *pret = dest;

char *str1 = (char *)dest;

const char *str2 = (const char *)src;

assert(dest);

assert(src);

if((str1>str2) && (str1<(str2+count)))

{

while(count--)

{

*(str1+count) = *(str2+count);

}

}

else

{

while(count--)

{

*str1++ = *str2++;

}

}

return pret;

}

int main()

{

int arr[] = {1,2,3,4,5,6,7,8,9,0};

int sz = sizeof(arr)/sizeof(arr[0]);

int i = 0;

my_memmove(arr+3,arr,5*sizeof(int));

for(i = 0;i < sz;i++)

{

printf("%d\n",arr[i]);

}

return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: