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

来源:互联网 发布:海森伯格矩阵图片 编辑:程序博客网 时间:2024/05/16 15:34

模拟实现strcpy(strcpy将’\0’也拷贝进去,strncpy则不拷贝)

#define _CRT_SECURE_NO_WARNINGS 1#include <stdio.h>#include <windows.h>#include <assert.h>#include <string.h>char *my_strcpy(char *dest, const char *src){    char *cp = dest;    assert(dest);    assert(src);    while (*dest++ = *src++)//依次复制    {        ;    }    return cp;}int main(){    char a[10] = { 0 };    char *p = "abcdef";    char *ret=my_strcpy(a, p);    printf("%s\n", ret);    system("pause");    return 0;}

模拟实现strcat

char *my_strcat(char *dest, const char *src){    char *cat = dest;//保留返回值位置    assert(dest);    assert(src);    while (*dest != '\0')    {        dest++;    }    while (*dest++ = *src++)    {        ;    }    return cat;}int main(){    char a[12] = "abcdef";    char *p = "123456";    char *ret=my_strcat(a, p);    printf("%s\n", ret);    system("pause");    return 0;}

模拟实现strstr

找子串,若是,则返回目标串在子串中的位置没有则返回空指针char *my_strstr(const char *str, const char *substr){    assert(str);    assert(substr);    char *end = str + strlen(str) - strlen(substr) + 1;    char *start = str;    while (start < end)    {        char *substart = substr;//子串开始        char *strstart = start;        while (*substart)        {            if (*substart == *strstart)//指向位置相同            {                substart++, strstart++;            }            else            {                break;            }        }        if (*substart == '\0')//找到        {            return start;        }        start++;    }}int main(){    const char *p = "hello worldhello world";    char *ret = my_strstr(p,"orld");    printf("sub begin:%s\n", ret);    system("pause");    return 0;}

模拟实现strcmp

int my_strcmp(const char *str1, const char *str2){    assert(str1);    assert(str2);    const char *p = str1;    const char *q = str2;    while (*p != '\0' && *q != '\0')    {        if (*p == *q)        {            p++, q++;        }        else if (*p > *q)        {            return 1;        }        else {            return -1;        }    }    if (*p != '\0')    {        return 1;    }    if (*q != '\0')    {        return -1;    }    return 0;}int main(){    const char *str1 = "abcdef";    const char *str2 = "bbcdef";    int ret = my_strcmp(str1, str2);    printf("ret=%d\n", ret);    system("pause");    return 0;}

模拟实现memcpy

按字节拷贝,可拷贝任意类型void *my_memcpy(void *dest, const void *src, int count){    assert(dest);    assert(src);     char *dest_p = ( char *)dest;    const char *src_p = (const char *)src;    while (count--)    {        *dest_p = *src_p;        dest_p++;        src_p++;    }    return dest;}int main(){    int a[] = {1,2,3,4};    int b[4];    system("pause");    return 0;}

模拟实现 memmove

void *my_memmove(void *dst, const void *src, int count){    assert(dst);    assert(src);    const char *p = (const char *)src;    char *q = ( char *)dst;    if ((char*)src<(char *)dst && (char *)src + count>(char *)dst)//从右往左    {        p = p + count - 1;        q = q + count - 1;        while (count--)        {            *q = *p;            q--;            p--;        }    }    else    {        while (count--)        {            *q = *p;            q++;            p++;        }    }    return dst;}int main(){    char str[64] = "abcdefghij";    my_memmove(str+1, str, strlen(str));    printf("%s\n",str);    system("pause");    return 0;}
阅读全文
0 0
原创粉丝点击