【寒假刷题篇】–03

勤奋不是嘴上说说而已,而是实际的行动,在勤奋的苦度中持之以恒,永不退却。业精于勤,荒于嬉;行成于思,毁于随。在人生的仕途上,我们毫不迟疑地选择勤奋,她是几乎于世界上一切成就的催产婆。只要我们拥着勤奋去思考,拥着勤奋的手去耕耘,用抱勤奋的心去对待工作,浪迹红尘而坚韧不拔,那么,我们的生命就会绽放火花,让人生的时光更加的闪亮而精彩。

导读:本篇文章讲解 【寒假刷题篇】–03,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/142469.html

(0)
飞熊的头像飞熊bm

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!