库函数的模拟实现

strlen函数的模拟实现

#include <stdio.h>
int my_strlen(char* ps)
{
	int count = 0;
	while (*ps++)
	{
		count++;
	}
	return count;
}
int main()
{
	char str[] = "abcdefgh";
	int len = my_strlen(str);
	printf("%d ", len);
	return 0;
}

输出结果为:8

strcpy函数的模拟实现

char* my_strcpy(char* dest,const char* src)
{
	char* ret = dest;
	assert(dest && src);
	assert((int)strlen(dest) > (int)strlen(src));
	while (*dest++ = *src++)
	{
		;
	}
	return ret;
}
int main()
{
	char str1[] = "hello C";
	char str2[] = "hello world";
	my_strcpy(str2, str1);
	printf("%s", str2);
	return 0;
}

输出结果为:Hello C

strcmp函数的模拟实现 


int my_strcmp(const char* pstr1, const char* pstr2)
{
	assert(pstr1 && pstr2);
	while (*pstr1 || *pstr2)
	{
		if (*pstr1 > *pstr2)
		{
			return 1;
		}
		else if (*pstr1 < *pstr2)
		{
			return -1;
		}
		pstr1++;
		pstr2++;
	}
	return 0;
}
int main()
{
	char str1[] = "hello bit";
	char str2[] = "hello world";
	char str3[] = "hello bit";
	int ret1 = my_strcmp(str1, str2);//-1
	int ret2 = my_strcmp(str2, str1);//1
	int ret3 = my_strcmp(str1, str3);//0
	printf("%d %d %d\n", ret1, ret2, ret3);
	return 0;
}

输出结果:-1 1 0

 strcat函数的模拟实现

char* my_strcat(char* dest, const char* src)
{
	assert(dest && src);
	char* ret = dest;
	int len = strlen(dest);
	dest += len;
	while (*dest++ = *src++)
	{
		;
	}
	return ret;
}
int main()
{
	char str1[50] = "hello C";
	char str2[20] = "hello world";
	my_strcat(str1, str2);
	printf("%s\n", str1);
	return 0;
}

输出结果为:hello Chello world

 strstr函数的模拟实现

char* my_strstr(const char* dest, const char* src)
{
	assert(dest && src);
	assert((int)strlen(dest) >= (int)strlen(src));
	const char* ret = dest;
	const char* src1 = src;
	while (*dest)
	{

		if (*dest == *src)
		{
			dest++;
			src++;
		}
		else
		{
			++ret;
			dest = ret;
			src = src1;
		}
		if (*src == '\0')
		{
			return ret;
		}

	}
	return NULL;
}
int main()
{
	char string[] = "The quick brown dog jumps over the lazy fox";
	char str[] = "lazy";
	printf("%s", my_strstr(string, str));
	return 0;
}

输出结果为:lazy fox

memcopy函数的模拟实现 

void* my_memcpy(void* dest, const void* src, size_t count)
{
	void* ret = dest;
	while (count--)
	{
		*(char*)dest = *(char*)src;
		dest = (char*)dest + 1;
		src = (char*)src + 1;
	}
	return ret;
}

int main()
{
	//int arr[5] = { 1,2,3,4,5 };
	//int copy[5];
	char arr[] = "Hello World";
	int len = strlen(arr);
	char copy[20] = { 0 };
	my_memcpy(copy, arr, len+1);
	printf("%s\n",copy);
	for (int i = 0; i < 20; i++)
	{
		printf("%c",copy[i]);
	}
	return 0;
}

输出结果为:Hello World
                      Hello World

 memmove函数的模拟实现

void* my_memmove(void* dest, const void* src, size_t count)
{
	void* ret = dest;
    if (dest <= src || (char*)dest >= (char*)src + count)
    {
		while (count--)
		{
			*(char*)dest = *(char*)src;
			dest = (char*)dest + 1;
			src = (char*)src + 1;
		}
    }
	else
	{
		dest = (char*)dest + count - 1;
		src = (char*)src + count - 1;
		while (count--)
		{
			*(char*)dest = *(char*)src;
			dest = (char*)dest - 1;
			src = (char*)src - 1;
		}
	}
    return ret;
}

int main()
{
	char src[] = "Hello World";
	char dest[] = "Hello World";
	memmove(src, src+2, 4);
	printf("%s\n", src);
	my_memmove(dest, dest + 2, 4);
	printf("%s\n", dest);

	int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
	memmove(arr+2, arr + 1, 3);
	for (int i = 0; i < 10; i++)
	{
		printf("%d ", arr[i]);
	}
	printf("\n");
	int a[10] = { 1,2,3,4,5,6,7,8,9,10 };
	my_memmove(a + 2, a + 1, 3);
	for (int i = 0; i < 10; i++)
	{
		printf("%d ", a[i]);
	}
	return 0;
}

输出结果为:llo o World
                      llo o World
                      1 2 2 4 5 6 7 8 9 10
                      1 2 2 4 5 6 7 8 9 10

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值