【寒假刷题篇】--03

本文介绍了如何用C语言模拟实现strcpy()和strlen()函数,强调了做题的目的在于理解和学习,而非仅仅完成任务。在strcpy()实现中,使用了双指针和循环不变量原则,同时指出了保存首地址和检查空指针的重要性。在strlen()实现中,同样应用了循环不变量原则并添加了const保护,防止字符串内容被修改。文章还提到了assert的使用来确保指针有效性。
摘要由CSDN通过智能技术生成

🥫写刷题篇的初衷一方面是记录自己做的题,这是最片面的,最重要的是记录和分享自己从这个题目的收获,一些关于题目的思想。
🎋也许下面的题不一定很多,也不一定都很难,也不一定很高深,但是我认为做题不是为了做题而做题,而是从这个题目当中获得了什么,有没有积累到知识,有没有学到思维,学到方法。如果有,那么我觉得是这个题做的是值得的。所以对待我所做的每个题我都格外珍惜,让自己每次都不白白的做一道题。
🚎刷的题目数量不定,目的是每天有敲代码,有所收获。

01,模拟实现strcpy()

🥠思路:

  • 🥓明确目的:首先有两个字符串,需要把源字符串src复制到des(连同’\0’),返回复制后字符串的首地址。
  • 🚐思路:关键部分肯定还是利用双指针来实现的,两个指针,分别从前往后遍历,把src中的元素将src覆盖,src的指针没有遇到’\0‘就不停下–循环不变量原则,即while(*pointer!='\0')

🎁C具体实现:

#include<stdio.h>
#include<assert.h>
char* my_strcpy(char* des, const char* src)
{
	assert(des && src);
	char* ret = des;//记录des的首地址,否则后面就被修改了
	while (*src!='\0')
	{
		*des++ = *src++;
	}
	*des = '\0';
	return ret;
}
int main()
{
	char arr[30] = { '\0'};
	char* str = "abcdef";
	my_strcpy(arr, str);
	puts(my_strcpy(arr, str));
	return 0;
}

🥙易错点

  • 注意:des做了双指针其中之一,会被修改,注意提前用char *ret记录返回字符串的首地址。

👑有哪些细节需要注意

  • assert(表达式)断言指针的有效性,因为后面要对指针解引用,所以提起判断指针是否为空,如果为空,则报错,避免对空指针的解引用。🥘在需要对指针进行解引用之前,断言以下指针的有效性
  • const char*:给src加上const使src指向的内容不能被修改,防止错误的将src中的内容修改—。因为我们的目的是把src复制给des,不希望src修改。如果修改了,能及时发现错误---->使用const修饰的好处.
    • 💫 const char * ptr :ptr指向的内容不可以修改((*ptr)=cerror),ptr可以修改(ptr++OK)
    • 💫char * const ptr :ptr指向的内容可以修改,ptr自身不可以修改(ptr++error)

02,模拟实现strlen()


//模拟实现strlen
#include<stdio.h>
#include<assert.h>
int my_strlen(const char* str)//我们只是来统计字符串的长度,不希望字符串的内容被修改,加上const保护
{
	int count = 0;
	assert(str!=NULL);
	while (*str != '\0')//循环不变量原则
	{
		count++;
		str++;
	}
	return count;
}
int main()
{
	char* str = "abcde";
	int len = my_strlen(str);
	printf("%d", len);
	return 0;
}
  • 8
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

是瑶瑶子啦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值