模拟实现strlen,strcpy,strcat,strcmp,strstr,memcpy,memmove

来源:互联网 发布:掌上电脑写卡软件 编辑:程序博客网 时间:2024/05/16 11:48

1.三种方式模拟实现strlen函数。
2.模拟实现strcpy
3.模拟实现strcat
4.模拟实现strcmp
5.模拟实现strstr
6.模拟实现memcpy
7.模拟实现memmove

#include<stdio.h>#include<assert.h>     //1.三种方式模拟实现strlen函数。void my_strlen1(char* p){    int count = 0;    while (*p != '\0')    {        count++;        p++;    }    printf("%d\n", count);}void my_strlen2(char* p){    char* tmp = p;    while (*p != '\0')    {        p++;    }    printf("%d\n", p - tmp);}int my_strlen3(char* p){    if (*p == '\0')    {        return 0;    }    else    {        return my_strlen3(++p) + 1;    }}     //2.模拟实现strcpychar* my_strcpy(char* dest, const char* src){    assert(dest);    assert(src);    char* ret = dest;    while (*dest++ = *src++);    return ret;}     //3.模拟实现strcatchar* my_strcat(char* dest, const char* src){    assert(dest);    assert(src);    char* ret = dest;    while (*dest)    {        dest++;    }    while (*dest++ = *src++);    return ret;}     //4.模拟实现strcmpchar* my_strcmp(const char* dest, const char* src){    assert(dest);    assert(src);    while (*dest == *src)    {        if (*dest == '\0' || *src == '\0')        {            return 0;        }        dest++;        src++;    }    return dest - src;}     //5.模拟实现strstrchar*my_strstr(const char* str1, const char* str2){    assert(str1);    assert(str2);    char* start = str1;    char* substart = str2;    char* cur = str1;    while (*cur)    {        start = cur;        substart = str2;        while (*start && *substart && (*start == *substart))        {            start++;            substart++;        }        if (*substart == '\0')        {            return cur;        }        cur++;    }    return NULL;}     //6.模拟实现memcpyvoid *my_memcpy(void *dest, const void *src, size_t count){    void *ret = dest;    while (count--)    {        *(char *)dest = *(char *)src;        dest = (char *)dest + 1;        src = (char *)src + 1;    }    return ret;}     //7.模拟实现memmovevoid *my_memmove(void *dest, const void *src, size_t count){    void *ret = dest;    if (dest < src)    {        while (count--)        {            *(char *)dest = *(char *)src;            dest = (char *)dest + 1;            src = (char *)src + 1;        }    }    else    {        while (count--)        {            *((char*)dest + count) = *((char*)src + count);        }    }    return ret;}int main(){    char p[] = "abcde";    char q[10];    char p1[20] = "hello ";    char p2[] = "word";    char p3[] = "abbbcdf";    char p4[] = "bcd";    char p5[] = "bcr";    void *dest[] = { 1, 2, 3, 4, 5, 6 };    void *str[] = { 7, 8, 9 };    my_strlen1(p);    my_strlen2(p);    printf("%d\n", my_strlen3(p));    printf("%s\n", my_strcpy(q, p));    printf("%s\n", my_strcat(p1, p2));    printf("%d\n", my_strcmp(p1, p2));    printf("%d\n", my_strcmp(p1, p1));    printf("%d\n", my_strcmp(p2, p1));    printf("%s\n", my_strstr(p3, p4));    printf("%s\n", my_memcpy(p2, p1, 3));    printf("%s\n", my_memmove(p4, p5, 2));    return 0;}
阅读全文
0 0