库函数的模拟实现

模拟实现strlen

#include<stdio.h>

size_t my_strlen(const char* arr)

{

	size_t s = 0;

	while (*arr)

	{

		arr++;

		s++;

	}

	return s;

}

int main()

{

	char arr[] = "hello,world!";

	printf("%zu", my_strlen(arr));

	return 0;

}

模拟实现strcpy

void my_strcpy(char * dest,const char * src)

{

	while (*dest++ = *src++)

	{

		;

	}

}

int main()

{

	char arr1[] = "hello,world!";

	char arr2[20] = { 0 };

	my_strcpy(arr2, arr1);

	printf("%s", arr2);

	return 0;

}

模拟实现strcmp

int my_strcmp(const char *arc1, const char* arc2)

{

	while ((*arc1) &&((*arc1) == (*arc2)))

	{

		arc1++;

		arc2++;

	}

	return (unsigned char)(*arc1) - (unsigned char)(*arc2);



}

int main()

{

	char arr1[] = "applE";

	char arr2[] = "apple";

	int r = my_strcmp(arr1, arr2);

	if (r > 0)

		printf("arr1>arr2");

	else if(r==0)

		printf("arr1=arr2");

	else 

		printf("arr1<arr2");

	return 0;

}

模拟实现strcat

void my_strcat(char *dest,const char * src)

{

	while (*dest)

	{

		dest++;

	}

	while (*dest = *src)

	{

		dest++;

		src++;

	}

}

int main()

{

	char arr1[20] = "hello";

	char arr2[20] = "world";

	my_strcat(arr1, arr2);

	printf("%s", arr1);

	return 0;

}

模拟实现strstr

const char * my_strstr(const char * arr1,const char * arr2)

{

	const char* a1 = arr1;

	const char* a2 = arr2;

	if (*arr2 == '\0')

		return arr1;

	while (*a1)

	{

		const char* begin = a1;

		while (*begin && *a2&&(*begin ==*a2))

		{

			begin++;

			a2++;

		}

		if (*a2 == '\0')

			return a1;

		a2 = arr2;

		a1++;

	}

	return NULL;

}



int main()

{

	char arr1[] = "abcabcabcd";

	char arr2[] = "abcabcd";

	const char * ret =my_strstr(arr1, arr2);

	if (ret == NULL)

		printf("no found");

	else printf("found:%s", ret);

	return 0;

}

模拟实现strncpy

void my_strncpy(char *dest,const char * src,size_t num)

{

	while((num)&&(*src))

	{

		*dest = *src;

		dest++;

		src++;

		num--;

	}

	while (num > 0)

	{

		*dest = '\0';

		dest++;

		num--;

	}

}

int main()

{

	char arr1[20] = "hello";

	char arr2[20] = "world";

	my_strncpy(arr1, arr2, 2);

	printf("%s", arr1);

	return 0;

}

模拟实现strncat

void my_strncat(char* dest, const char* src, size_t num)

{

	while (*dest)

	{

		dest++;

	}

	while (num && *src)

	{

		*dest = *src;

		dest++;

		src++;

		num--;

	}

	*dest = '\0';

}



int main()

{

	char arr1[20] = "hello";

	char arr2[20] = "world";

	my_strncat(arr1, arr2, 3);

	printf("%s", arr1);

	return 0;

}

模拟实现memcpy

void my_memcpy(void * dest,void * src,size_t num)

{

	while (num&&(*(char*)src))

	{

		*(char*)dest = *(char*)src;

		((char*)dest)++;

		((char*)src)++;

		num--;

	}

	if (num == 0)

		*(char*)dest = '\0';

}

int main()

{

	char src[] = "123456789";

	char dest[10] = { 0 };

	my_memcpy(dest, src, 7);

	printf("%s", dest);

	return 0;

}

模拟实现memmove

void my_memmove(char* dest, char* src, size_t num)

{

	if (src >= dest)

	{

		while (num)

		{

			*dest = *src;

			dest++;

			src++;

			num--;

		}

	}	

	else

	{

		while (num)

		{

			*(dest + num-1) = *(src + num-1);

			num--;

		}

	}

 

}



int main()

{

	char arr[20] = "123456789";

	/*my_memmove(arr+2, arr+3, 3);

	printf("%s\n", arr);*/

	//124566789

	my_memmove(arr + 3, arr + 2, 3);

	//123345789

	printf("%s\n", arr);

	return 0;

}

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值