String库函数部分实现

1.实现strcpy

char *Strcpy(char *des ,char *src)
{
	if(des == NULL)
		return ;
	if(src == NULL)
		return ;
	char *tmp = des;
	while (*des++ = *src++);
	des = tmp;
	return des;
}

2.实现strcat

void *Strcat(char *des, char *src)
{
	assert(des);
	assert(src);
	char *tmp = des;
	while (*des)
		des++;
	while (*des++ = *src++);
	return tmp;
}

3.实现strstr

void *Strstr(const char *des, const char *src)
{
	assert(des);
	assert(src);
	char *sub_str = src;
	char *red_str = NULL;
	char *black_str = des;
	while (*black_str)
	{
		sub_str = src;
		red_str = black_str;
		while (*sub_str && red_str && (*sub_str == *red_str))
		{
			sub_str++; red_str++;
		}
		if (0 == *sub_str)
		{
			return black_str;
		}
		black_str++;
	}
	return NULL;
}

4.实现strchr

void *Strchr(const char *src,int c )
{
	assert(src);
	char *a = src;
	while (*a)
	{
		if (*a == c)
			break;
		a++;
	}
	if (*a == '\0')
	{
		return NULL;
	}
	return a;
}

5.实现strcmp

int Strcmp(const char *str1, const char *str2)
{
	assert(str1);
	assert(str2);
	const char *a = str1;
	const char *b = str2;
	while (*a && *b)
	{
		if (*a == *b)
		{
			a++; b++;
		}
		else
		{
			return *a > *b ? 1 : -1;
		}
	}
	if (*a == '\0' && *b == '\0')
		return 0;
	if ('\0' == *a)
		return -1;
	else
		return 1;
}
//第二种方法
int Strcmp1(const char *str1, const *str2)
{
	assert(str1);
	assert(str2);
	const char *a = str1;
	const char *b = str2;
	int ret = 0;
	while (!(ret = *a - *b) && *a && *b )
	{
		a++; b++;
	}
	if (*a == '\0' && *b == '\0')
		return 0;
	if ('\0' == *a)
		return -1;
	else
		return 1;
	if (ret > 0)
		return 1;
	if (ret < 0)
		return -1;
}

6.实现memcpy

void *Memcpy(void *des, void *src, size_t count)
{
	assert(des);
	assert(src);
	char *a = (char*)des;
	char *b = (char*)src;
	while (count--)
	{
		*a = *b;
		a++;
		b++;
	}
	return des;
}

7.实现memmove

void *my_memmove(void *des, void *src, size_t count)
{
	assert(des);
	assert(src);
	char *a = (char*)des;
	char *b = (char*)src;
	if (a > b && a <= (b + count))
	{
		while (count--)
		{
			*(a + count) = *(b + count);
		}
	}
	else
	{
	while (count--)
		{
		*a = *b;
		a++;
		b++;
		}
	}
	return des;
}

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值