实现C语言库函数的模拟实现

一:实现模拟strlen函数

1.0:使用计数器的方法实现

首先定义一个字符数组,然后统计这字符数组的字符数。将他传递给my_strlen函数

#include<stdio.h>
#include<assert.h>
int my_strlen(char* str)
{
    //到这里我们确保一下指针的有效性
	assert(str);
	//定义一个计数器
	int count = 0;
	while (*str != '\0')
	{
		*str++;
		count++;
	}
	return count;
}
int main()
{
	char arr[] = "abcdef";
	int ret = my_strlen(arr);
	printf("%d\n", ret);
	return 0;
}

2.0:使用递归的方法不创建临时变量计数器

这里我们直接从函数的内部开始讲起,用指针接受咱们的一个字符数组,然后用const进行修饰不让其进行改变。如果等于\0也就是我们的字符数组已经到了结尾那就返回0,否则就返回我们的1加上(str+1)将他们作为一个整体再次传递给my_strlen函数这样就相当于跳过了刚刚的+1的那一个字符,从他的后面再次进行计数如此循环直到结束。

int my_strlen(const char* str)
{
	assert(str);
	if (*str == '\0')
		return 0;
	else
		return 1 + my_strlen(str + 1);
}
int main()
{
	char arr[] = "abcdef";
	int ret = my_strlen(arr);
	printf("%d\n", ret);
}

3.0:运行截图

二:实现模拟拷贝字符串的函数strcpy

注意:在这里头文件需要加上#include<assert.h>

首先定义两个数组将数组1的内容拷贝到数组2里面去首先用const修饰一下src防止源字符数组被修改,然后定义目标字符数组的指针也就是我们要拷贝到的位置,确保两个指针都有效的情况下进行拷贝我们让dest=src只要src!不等于\0就一直拷贝下去直到结束。

char* my_strcpy(char* dest, const char* src)
{
	//保证指针的有效性
	assert(dest != NULL);
	assert(src != NULL);
	char* ret = dest;
	while (*dest++ = *src++)
	{
		;
	}
	return ret;
}
int main()
{
	char arr[] = "abcdef";
	char arr2[20] = { 0 };
	my_strcpy(arr2, arr);
	printf("%s\n", arr2);
	return 0;
}

运行截图:

三:实现追加字符串函数

首先我们定义两个字符类型的数组arr1和arr2,在这里我们将arr2拷贝到arr1里面去。这里从函数部分开始讲解,定义目标变量和源变量采用指针的形式,然后用ret接收一下dest的首字符的地址,方便后续return进行一个返回从首字符开始打印。然后用assert确保一下指针的有效性,先找到dest的最后一个字符然后从这个字符开始追加,每次追加一个之后都记性一次++。最后返回ret就可以。

#include<stdio.h>
#include<assert.h>
char* my_strcat(char* dest, const char* src)
{
	char* ret = dest;
	//确保指针的有效性
	assert(dest && src);
	//找到目标字符串的尾部
	while (*dest)
	{
		dest++;
	}
	//实现追加
	while ((*dest++=*src++))
	{
		;
	}
	return ret;
}
int main()
{
	char arr1[20] = "abcdef";
	char arr2[20] = "ghi";
	my_strcat(arr1,arr2);
	printf("%s\n", arr1);
	return 0;
}

运行截图

  • 6
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值