前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【海贼王编程冒险 - C语言海上篇】库函数怎样模拟实现?

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

作者头像
枫叶丹
发布2024-06-04 11:31:12
660
发布2024-06-04 11:31:12
举报
文章被收录于专栏:C++C++

模拟实现strlen

代码语言:javascript
复制
#define _CRT_SECURE_NO_WARNINGS 1

#include <stdio.h>

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

代码语言:javascript
复制
#define _CRT_SECURE_NO_WARNINGS 1

#include <stdio.h>

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

代码语言:javascript
复制
#define _CRT_SECURE_NO_WARNINGS 1

#include <stdio.h>

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

代码语言:javascript
复制
#define _CRT_SECURE_NO_WARNINGS 1

#include <stdio.h>

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

代码语言:javascript
复制
#define _CRT_SECURE_NO_WARNINGS 1

#include <stdio.h>

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

代码语言:javascript
复制
#define _CRT_SECURE_NO_WARNINGS 1

#include <stdio.h>

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

代码语言:javascript
复制
#define _CRT_SECURE_NO_WARNINGS 1

#include <stdio.h>
#include <string.h>
#include <cassert>

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;
}

感谢大佬支持!!!

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-02-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 模拟实现strlen
  • 模拟实现strcpy
  • 模拟实现strcmp
  • 模拟实现strcat
  • 模拟实现strstr
  • 模拟实现memcpy
  • 模拟实现memmove
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档