【c語言】模擬實現strlen、strcpy、strcat、strstr、strcmp、memcpy、memmove

模擬實現strlen

#include<stdio.h>
#include<string.h>
    int my_strlen(char *arr)
    {
        int count = 0;
        char* pcur = arr;
        if (pcur)
        {
            while (*pcur++ != '\0') count++;
        }       
        return count;
    }
    int main()
    {
        char *arr = "hello world";
        int ret = my_strlen(arr);
        //int ret = strlen(arr);

        printf("%d\n", ret);
        return 0;
    }

模擬實現strcpy

#include<stdio.h>
#include<assert.h>
#include<string.h>
char* my_strcpy(char *dst, const char *src)
{
    char *ret = dst;
    assert(dst&&src);
    while ((*dst++ = *src++));
    return ret;
}
int main()
{
    char *arr = "hello world";
    char dst[14] = "";

    my_strcpy(dst, arr);

    printf("%s\n", dst);
    return 0;
}

模擬實現strcat

#include<stdio.h>
#include<assert.h>
#include<string.h>
char* my_strcat(char *dst, const char *src)
{
    char *ret = dst;
    assert(dst&&src);
    while (*dst)
    {
        dst++;
    }
    while ((*dst++ = *src++));
    return ret;
}
int main()
{
    char arr[] = "hello world";
    char *dst = " hello bit";

    char* ret =my_strcat(arr, dst);

    printf("%s\n", ret);
    return 0;
}

模擬實現strstr

#include<stdio.h>
#include<assert.h>
#include<string.h>
char *my_strstr(const char* src, const char* dst)
{
    assert(src&&dst);
    char *pcur1 = (char*)src;
    char *pcur2 = (char*)dst;
    char *cur = NULL;
    if (*dst == '\0')
        return NULL;
    while (*pcur1)
    {
        cur = pcur1;
        pcur2 = (char *)dst;
        while (*cur&&*pcur2 && (*cur == *pcur2))
        {
            cur++;
            pcur2++;
        }
        if (*pcur2 == '\0')
            return pcur1;
        pcur1++;
    }

}
int main()
{
    char arr[] = "casacsdscs";
    char *dst = "cs";

    char* ret = my_strstr(arr, dst);

    printf("%s\n", ret);
    return 0;
}

模擬實現strcmp

#include<stdio.h>
#include<assert.h>
int my_strcmp(const char* src, const char * dst)
{
    int ret = 0;
    while (!(ret = *(unsigned char *)src - *(unsigned char*)dst)&&*dst)
    {
        ++src;
        ++dst;
    }
    if (ret < 0)
        ret = -1;
    else if (ret > 0)
        ret = 1;
    return ret;
}
int main()
{
    char arr[] = "cbsacsdscs";
    char *dst = "casacsdscs";

    int ret = my_strcmp(arr, dst);

    printf("%d\n", ret);
    return 0;
}

模擬實現memcpy

#include<stdio.h>
#include<assert.h>
void *my_memcpy(void *dst,const  void *src, size_t count)
{
    void *ret = dst;
    while (count--)
    {
        *(char*)dst = *(char*)src;
        dst = (char*)dst + 1;
        src = (char*)src + 1;
    }
    return ret;
}
int main()
{
    char dst[10] = "";
    char *arr = "casacsdscs";

    void* ret = my_memcpy(dst, arr,5);

     printf("%s\n", ret);   
    return 0;
}

模擬實現memmove

#include<stdio.h>
#include<assert.h>
void *my_memmove(void *dst, void *src, size_t count)
{
    void *ret = dst;
    if (dst <= src || (char*)dst <= (char*)src)//src地址小於dst地址時從頭拷貝
    {
        while (count--)
        {
            *(char*)dst = *(char*)src;
            dst = (char*)dst + 1;
            src = (char*)src + 1;

        }
    }
    else//
    {
        dst = (char*)dst + count - 1;
        src = (char*)src + count - 1;

        while (count--)
        {
            *(char*)dst = *(char*)src;
            dst = (char*)dst - 1;
            src = (char*)src - 1;

        }
    }
    return ret;
}
#include<stdio.h>
int main()
{
    char dst[10] = "";
    char arr[20]= "abcdefghij";
    printf("%s\n", arr);
    void* ret = my_memmove(arr, arr+3, 5);

    printf("%s\n", ret);
    ret = my_memmove(arr+3, arr, 5);

    printf("%s\n", ret);
    return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章