用C语言模拟事项str和mem系列

实现strcpy代码:

char * my_strcpy(char *des, const char *src)
{
    if (!src) return NULL;
    char * pd=des;
    const char *ps = src;
    while (*pd++ = *ps++);
    return des;
}

实现strcat代码:

char *my_strcat(char *des, const char * src)
{
    char *p = des;
    while (*p)
    {
        p++;
    }
    const char *q = src;
    while (*p++ = *q++);
    return des;
}

实现strstr代码:

char * my_strstr(char *des, const char *src)
{
    char *d = des;
    char *rd = des;
    const char *p = src;
    while(*d)
    {
        if (*p == *d)
        {
            p++; d++;
        }
        else
        {
            rd++;
            d = rd;
            p = src;
        }
        if (!*p)return rd;
    }
    return 0;
}

实现strchr代码:

char * my_strchr(char *des, const char c)
{
    char *p = des;
    while (*p)
    {
        if (*p == c)
            return p;
        else p++;
    }
    return 0;
}

实现strcmp代码:

int my_strcmp(char *des, char *src)
{
    assert(des);
    assert(src);
    char *p = des;
    char *q = src;
    while (*p&&*q)
    {
        if (*p > *q)
            return 1;
        else if (*p < *q)
            return -1;
        else p++, q++;
    }
    if (*p)return 1;
    else if (*q)return -1;
    else return 0;
}

实现memcpy代码:

void* my_memcpy(void* des, const void *src,int count)
{
    if (!src) return NULL;
    char * pd = des;
    const char *ps = src;
    while (count--) 
    {
        *pd++ = *ps++;
    }
    return des;
}

实现memmove代码:

void* my_memmove(void* des, const void *src, int count)
{
    if (!src) return NULL;
    char * pd = des;
    const char *ps = src;
    if ((ps + count) > pd &&ps < pd)
    {
        ps = ps + count;
        pd = pd + count;
        while (count--)
        {
            *pd-- = *ps--;
        }
    }
    else 
    {
        while (count--)
        {
            *pd++ = *ps++;
        }
    }
    return des;
}

猜你喜欢

转载自blog.csdn.net/weixin_40921797/article/details/81805853