C语言的字符串复制

提示:仅供参考,如有错误,还望指出。


目录

目录

一、字符串复制

二、一些优化

1.一次简单优化

2.二次优化

3.三次优化

4.四次优化

5.最后的优化

总结


前言

以下是对字符串复制的一些优化

一、字符串复制

 这是自己能想到的方法

主要思想:通过两个指针,对二者进行遍历,若该被复制的字符不为‘\0’来进行一一复制。

可是这样‘\0’字符就无法复制,而此时被复制字符的地址刚好又是‘\0’,再进行一次复制就好。

//我的字符串复制
void my_strcpy(char* dest,char* rsc)
{
	while (*rsc != '\0')
	{
		*dest = *rsc;
		dest++;
		rsc++;
	}
	*dest = *rsc;
}

二、一些优化

注:这些优化都是基于前一次的优化,也体现出一个循序渐进的过程

1.一次简单优化

这里实现了一小点的优化,也就是将三句语句合成一句

void my_strcpy(char* dest, char* rsc)
{
	while (*rsc != '\0')
	{
		*dest++ = *rsc++;
	}
	*dest = *rsc;
}

2.二次优化

这里实现了我们既可以赋值字符也能够复制'\0'

由于当被复制的字符为‘\0’时,也得到了复制,同时还跳出了循环

void my_strcpy(char* dest, char* rsc)
{
	while (*dest++ = *rsc++)
	{
		;
	}
}

3.三次优化

这里优化了健壮性,可这里没有体现出问题在哪。

在二次优化中,添加了一个判断语句,只有二者同时不为空指针时,才会进入遍历复制的过程。

void my_strcpy(char* dest, char* rsc)
{
	if (dest != NULL && rsc != NULL)
	{
		while (*dest++ = *rsc++)
		{
			;
		}
	}
}

4.四次优化

这里用到了断言函数assert();同时需要添加该头文件

使用assert()函数,若不满足函数体中条件,就会报错,并且具体体现在哪一行,更有利于找错。

#include
my_strcpy(char* dest, char* rsc)
{
	assert(dest != NULL);
	assert(rsc != NULL);
	while (*dest++ = *rsc++)
	{
		;
	}
}

5.最后的优化

这个就比较细节,也是为了防止一些错误而形成的优化。

在被复制字符中加上一个const,为了防止while循环中的条件,若不注意将二者位置调换,就会出现报错的情况。

这里也给大家推荐一个网站cplusplus.com - The C++ Resources Network 

若有不懂的函数或者函数需要的头文件都可以在这里查。         这里也到了strcpy函数中参数的类型,若以后要写类似于库函数的函数也可以考虑这里面的参数类型。

#include
void my_strcpy(char* dest, const char* rsc)
{
	assert(dest != NULL);
	assert(rsc != NULL);
	while (*dest++ = *rsc++)
	{
		;
	}
}

总结

       在我看来,编程很像数学,每当你了解到一个题目的多种解法后,有些解法会给人一种十分奇妙的感觉,也有一种勾起好奇心的感觉,就是由于这种好奇心,促使这我们成长。不过有时候的编程也很乏味,但是我们一定要坚持。

学习不易,如果这篇对你有帮助,足矣。

最后附上学习的链接(同样要是有一起学习的伙伴就更好了)

25.VS环境-C语言实用调试技巧(2)(C语言程序设计教程谭浩强 c语言谭浩强视频教程 c语言零基础入门教程 学习c语言 c语言视频教程 c语音 C语言教程_哔哩哔哩_bilibili

你可能感兴趣的:(python,pandas,数据分析)