字符串函数及内存函数的模拟实现

目录

strlen模拟实现(3种)

strcpy模拟实现:

strcat模拟实现:

strcmp模拟实现:

strstr模拟实现:

memcpy模拟实现:

memmove模拟实现:


strlen模拟实现(3种)

//计数器方式
int my_strlen(const char * str)
{
int count = 0;
while(*str)
{
count++;
str++;
}
return count;
}

//不能创建临时变量计数器
int my_strlen(const char * str)//递归
{
if(*str == '\0')
return 0;
else
return 1+my_strlen(str+1);
}

//指针-指针的方式
int my_strlen(char *s)
{
char *p = s;
while(*p != ‘\0’ )
p++;
return p-s;
}

strcpy模拟实现:

char *my_strcpy(char *dest, const char*src)
{
char *ret = dest;
assert(dest != NULL);

assert(src != NULL);
while((*dest++ = *src++))
{
;
}
return ret;
}

strcat模拟实现:

char *my_strcat(char *dest, const char*src)
{
char *ret = dest;
assert(dest != NULL);
assert(src != NULL);
while(*dest)
{
dest++;
}
while((*dest++ = *src++))
{
;
}
return ret;
}

strcmp模拟实现:

int my_strcmp(const char* s1, const char* s2)
{
    assert(s1 && s2);
    while (*s1 == *s2)
    {
        if (*s1 == '\0')
           return 0;
        s1++;
        s2++;
   }

    return *s1 - *s2;
}

strstr模拟实现:

char* my_strstr(const char* dest, const char* src)
{
    const char* s1 = dest;
    const char* s2 = src;
    const char* p = dest;
    if (*s2 == '\0')
        return dest;
    while (*p != '\0')
    {
        s1 = p;
        s2 = src;
        while (*s1 && *s2 && *s1 == *s2)
        {
            s1++;
            s2++;
        }
        if (*s2 == '\0')
            return p;
        p++;
    }
    return NULL;
}

memcpy模拟实现:

void * memcpy ( void * dst, const void * src, size_t count)
{
void * ret = dst;
assert(dst);
assert(src);
/*
* copy from lower addresses to higher addresses
*/
while (count--) {
*(char *)dst = *(char *)src;
dst = (char *)dst + 1;
src = (char *)src + 1;
}
return(ret);
}

memmove模拟实现:(为辅助理解 下方有配图)

void* my_memmove(void* dest, void* src, size_t num)
{
    assert(dest && src);
    void* ret = dest;
    if (dest < src)//前向后
    {
        while (num--)
        {
            *(char*)dest = *(char*)src;
            dest = (char*)dest + 1;
            src = (char*)src + 1;
        }
    }
    else//后向前
    {
        while (num--)
        {
            *((char*)dest + num) = *((char*)src + num);

        }
    }
    return ret;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值