强大的字符串函数的模拟实现

今天要给大家讲的是库函数的模拟实现,让你拥有自己制作函数的魅力!
在这里插入图片描述

库函数的模拟实现

1strlen

法一计数器

size_t my_strlen(char*c)
{
	size_t i=0;
	while (1)
	{
		if (c[i] == 0)
			break;
		i++;
	}
	return i;
}
int main()
{
	char c[] ="snbtwxl";
	printf("%zd\n", strlen(c));
	printf("%zd", my_strlen(c));
	return 0;
}

法二函数递归

size_t my_strlen(char* c)
{
	if (*c != 0)
		return 	 my_strlen(c + 1) + 1;
	else
		return 0;
		
}
int main()
{
	char c[] = "snbtwxl";
	printf("%zd\n", strlen(c));
	printf("%zd", my_strlen(c));
	return 0;
}

2strcpy

char* my_strcpy(char* dest, char* src)
{
	int i = 0;
	char* ret = dest;
	while (*dest++ = *src++)
		 ;
		return ret;
}
int main()
{
	char c[] = "snbtwxl";
	char cc[66];
	printf("%s\n", strcpy(cc,c));
	printf("%s", my_strcpy(cc, c));
	return 0;
}

3strcmp

int my_strcmp(char*cc, char*c)
{
	while (*cc == *c&&*c!=0)
	{
		cc++;
		c++;
	}
		return *cc - *c;
}
int main()
{
	char c[] = "snbtwxl";
	char cc[] = "snbtwxl";
	printf("%d\n", strcmp(cc, c));
	printf("%d\n", my_strcmp(cc, c));
	return 0;
}

4strcat

char* my_strcat(char* c, char* cc);
int main()
{
	char c[66] = "wyzzy";
	char cc[66] = "zdjsj";
	printf("%s\n", strcat(c, cc));
	printf("%s", my_strcat(c, cc));
	return 0;
}
 char* my_strcat(char* c, char* cc)
{
	char* ret = c;
	while (*(++c));
	while (*c = *cc)
	{
		c++;
		cc++;
	}
	return ret;
}

5strstr

char* my_strstr(const char* str1, const char* str2)
{
	assert(str1 && str2);
	const char* s1 = NULL;
	const char* s2 = NULL;
	const char* cur = str1;
	while (*cur)
	{
		s2 = str2;
		s1 = cur;
			while (*s1== *s2 && *s1&& *s2)
			{
				s1++;
				s2++;
			}
			if (*s2 == 0)
				return cur;
			else if (*s1 == 0)
				return NULL;
			else
				cur++;
		}
	return NULL;
}
int main()
{
	char* str1 = "asdfgiantsv5";
	char* str2 = "giants";
	printf("%s\n%s", strstr(str1, str2), my_strstr(str1, str2));
	return 0;
}

今天就到这里了,您的支持就是我创作的最大动力!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值