C语言——一些字符串函数的模拟实现

本篇文章为一些字符串函数的模拟实现,对于字符串函数的深入了解可以浏览C语言——字符函数和字符串函数_学习笔记

模拟实现 strlen

size_t my_strlen(const char* ptr)
{
	assert(ptr);
	char* start = ptr;
	while (*ptr != '\0')
	{
		ptr++;
	}
	return (size_t)(ptr - start);
}

模拟实现strcpy

char* my_strcpy(char* dest, const char* src)
{
	assert(dest && src);
	char* ptr = dest;
	while (*dest++ = *src++)
	{
		;
	}
	return ptr;
}

模拟实现strcat

char* my_strcat(char* dest, const char* src)
{
	assert(dest && src);
	char* ptr = dest;
	while (*dest != '\0')
	{
		dest++;
	}
	while (*dest++ = *src++)
	{
		;
	}

	return ptr;
}

模拟实现strcmp

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

模拟实现strstr

const char* my_strstr(const char* s1, const char* s2)
{
    assert(s1 && s2);
    char* cp = s1;
    char* p1 = NULL;
    char* p2 = NULL;
    if (*s2 == '\0')
    {
        return s1;
    }
    while (*cp)
    {
        p1 = cp;
        char* p2 = s2;

        while (*p1 == *p2 && *p1 && *p2)
        {
            p1++;
            p2++;
            
        }
        if (*p2 == '\0')
        {
            return cp;
        }
        cp++;

    }
    return NULL;
    
}

模拟实现strncpy

char* my_strncpy(char* s1, const char* s2, size_t num)
{
	assert(s2);
	char* ret = s1;
	while (*s2 && num)
	{
		*s1 = *s2;
		num--;
		s1++;
		s2++;
	}
	return ret;
}

模拟实现strncat

char* my_strncat( char* s1, const char* s2,size_t num)
{
	assert(s2);
	char* ret = s1;
	while (*s1)
	{
		s1++;
	}
	while (*s2 && num)
	{
		*s1 = *s2;
		s1++;
		s2++;
		num--;
	}
	return ret;
}

模拟实现strncmp

int my_strncmp(const char *s1, const char *s2, size_t n) 
{
    while(n--) 
    {
        if(*s1 != *s2)
            return *s1 - *s2;
        else if(*s1 == '\0')
            return 0;
        s1++;
        s2++;
    }
    return 0;
}
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值