【海贼王编程冒险 - C语言海上篇】库函数怎样模拟实现?

目录

模拟实现strlen

模拟实现strcpy

模拟实现strcmp

模拟实现strcat

模拟实现strstr

模拟实现memcpy

模拟实现memmove


【海贼王编程冒险 - C语言海上篇】库函数怎样模拟实现?_第1张图片

模拟实现strlen

#define _CRT_SECURE_NO_WARNINGS 1

#include 

int MyStrlen(char* str)
{
	int len = 0;

	while (str[len] != '\0')
		len++;

	return len;
}

int main()
{
	char str[50] = { "Hello,world!" };

	int ans = MyStrlen(str);

	printf("%d\n", ans);

	return 0;
}

模拟实现strcpy

#define _CRT_SECURE_NO_WARNINGS 1

#include 

char* MyStrcpy(char* str2, char* str1)
{
	char* p = str2;

	while (*p++ = *str1++)
		;

	return str2;
}

int main()
{
	char str1[50] = { "Hello,world!" };
	char str2[50];

	MyStrcpy(str2, str1);

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

	return 0;
}

模拟实现strcmp

#define _CRT_SECURE_NO_WARNINGS 1

#include 

int MyStrcmp(const char* str1, const char* str2)
{
	int i = 0;
	while (str1[i] != '\0' && str2[i] != '\0' && str1[i] == str2[i])
		i++;

	return str1[i] - str2[i];
}

int main()
{
	const char* str1 = "apple";
	const char* str2 = "banana";
	const char* str3 = "apple";

	int ans1 = MyStrcmp(str1, str2);
	int ans2 = MyStrcmp(str1, str3);

	printf("%d\n%d", ans1, ans2);

	return 0;
}

模拟实现strcat

#define _CRT_SECURE_NO_WARNINGS 1

#include 

char* MyStrcat(char* str1, const char* str2)
{
	char* re = str1;
	while (*str1)
		str1++;

	while (*str2)
	{
		*str1 = *str2;
		str1++;
		str2++;
	}

	*str1 = '\0';

	return re;
}

int main()
{
	char str1[50] = "Hello,";
	const char* str2 = "world!";

	printf("%s\n", MyStrcat(str1, str2));

	return 0;
}

模拟实现strstr

#define _CRT_SECURE_NO_WARNINGS 1

#include 

char* MyStrstr(const char* str1, const char* str2)
{
	if (*str2 == '\0')
		return (char*)str1;

	while (*str1)
	{
		const char* s1 = str1;
		const char* s2 = str2;

		while (*s1 && *s2 && (*s1 == *s2))
		{
			s1++;
			s2++;
		}

		if (*s2 == '\0')
			return (char*)str1;

		str1++;
	}

	return NULL;
}

int main()
{
	const char* str1 = "Hello world";
	const char* str2 = "world";

	char* ans = MyStrstr(str1, str2);

	if (ans)
		printf("%ld\n", ans - str1);
	else
		printf("没找到\n");

	return 0;
}

模拟实现memcpy

#define _CRT_SECURE_NO_WARNINGS 1

#include 

void* MyMemcpy(void* brr, const void* arr, size_t size)
{
	char* b = (char*)brr;
	const char* a = (const char*)arr;

	for (size_t i = 0; i < size; i++)
		b[i] = a[i];

	return brr;
}

int main()
{
	int arr[] = { 1, 2, 3, 4, 5 };
	int brr[5] = { 0 };

	MyMemcpy(brr, arr, sizeof(brr));

	int size = sizeof(brr) / sizeof(brr[0]);

	for (int i = 0; i < size; i++)
	{
		printf("%d ", brr[i]);
	}

	return 0;
}

模拟实现memmove

#define _CRT_SECURE_NO_WARNINGS 1

#include 
#include 
#include 

void* MyMemmove(void* dest, const void* src, size_t size)
{
	assert(dest && src);
	char* ret = (char*)dest;
	if (dest < src)
	{
		while (size--)
		{
			*(char*)dest = *(char*)src;
			dest = (char*)dest + 1;
			src = (char*)src + 1;
		}
	}
	else if (dest > src)
	{
		while (size--)
		{
			*((char*)dest + size) = *((char*)src + size);
		}
	}
	return ret;
}

int main()
{
	int arr[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9,10 };

	MyMemmove(arr + 3, arr, 20);

	for (int i = 0; i < 10; i++)
	{
		printf("%d ", arr[i]);
	}

	return 0;
}

感谢大佬支持!!!

你可能感兴趣的:(C语言,c语言,visualstudio)