【算法】C语言程序编程模拟实现strlen函数和strcpy函数

C语言程序编程模拟实现strlen函数和strcpy函数(超详细的注释和解释)

求个赞求个赞求个赞求个赞 谢谢🙏


先赞后看好习惯 打字不容易,这都是很用心做的,希望得到支持你 大家的点赞和支持对于我来说是一种非常重要的动力 看完之后别忘记关注我哦!️️️
前言:作者:Yu
常用c程序编译器:vs2019**
**

用c程序编程实现strlen函数和strcpy函数是代码新人对指针基础理解和运用的一个好方法,通过用代码实现strlen和strcpy函数可以很好地帮助我们在刚接触c代码时巩固我们自身对代码的理解和提高写代码的能力

库函数里面的strlen函数:

strlen函数原型:size_t strlen ( const char * str );
通过该函数的返回值我们能直接字符串的长度
*1.size_t代表该函数返回值是一个无符号整型
2.const charstr 代表该函数的参数是一个不可改变的字符串的地址.

strlen函数的运用:

#include<stdio.h>
#include<string.h>//使用strlen函数我们需要引用该头文件
int main()
{
	char ch[20] = "abcdef";//定义一个字符串,并初始化
	int ret=strlen(ch);//将strlen函数的返回值赋给ret
	printf("%d\n", ret);//打印结果
	return 0;
}

//输出的结果是:6
//或者我们可以使用gets函数来输入自己想要的字符

代码模拟实现strlen函数:

我们知道,字符串的结尾都有一个’\0’,这个就是字符串结尾的标志。
那我们的思路就是,定义一个count变量来统计字符串长度,我们一个一个字符往后找,如果找到的字符不是’\0’那我们的count++一下,到最后,count的数就是我们所求的字符串长度啦!
上代码:

//strlen函数是通过找'\0'来判断字符串长度的
size_t my_strlen(char* str)//我们的函数返回类型是size_t,也就是无符号整型
{
	int count = 0;//定义一个count来计算我们的字符串长度
	while (*str != '\0')//循环走起来,如果我们找到的字符不是'\0',count++一下,str++一下,找下一个
	{
		str++;
		count++;
	}
	return count;
}
int main()
{
	char ch[20] = "abcdef";
	int ret = my_strlen(ch);//将my_strlen函数的返回值赋给ret
	printf("%d\n", ret);
	return 0;
}

在这里我们有用到指针的一些基础知识
一开始,我们是定义了一个数组ch,它的类型是char,里面放着我们的字符串,
我们写一个函数my_strlen来求这个长度的时候
我们要传参给我的函数
一维数组传参,传过去的是首元素的地址,因此,我们函数接收参数的时候,要写成char* 类型
(注意,charstr里面的和后面str里面的的意义是不同的哦,暂时不明白的伙伴可以私信我)
那么,我们的循环条件就是,str指向的字符如果不是’\0’,我们就要让str++一下,判断下一个
当我们找到’\0’的时候我们就可以跳出循环了,最后我们函数返回count即可得到我们的字符串长度。
(关于不知道const是什么意思的伙伴,可以给我留言哦)

以上这个模拟代码还可以进行优化:例如将循环条件直接改成(*str++)也是可以的!这样后面就不用写str++了。

如果对以上解释还有疑问的伙伴可以给我留言哦

库函数里面的strcpy函数

strcpy函数原型char * strcpy ( char * destination, const char * source );
strcpy函数可以帮助我们把一个字符串的内容拷贝到另一个字符串上。话不多说我们上代码:
strcpy函数的运用

int main()
{
	char arr1[20] = "xxxxxxxxxxxx";
	char arr2[] = "hello bro";
	strcpy_s(arr1, arr2);
	printf("%s\n", arr1);
}

输出结果在这里插入图片描述
我们看到,我们已经成功将arr2里面的内容拷贝到了arr1里面了。

代码模拟strcpy函数

同样,与上面strlen的模拟一样,我们也要用到函数传参等知识
思路:arr2的第一个元素赋给arr1的第一个元素
arr2的第二个元素赋给arr2的第二个元素…

        直到我们找到了arr2的'\0',说明我们的复制已经完成了
        此处要注意,我们的'\0'也是要拷贝过去的
        为什么:因为字符串以'\0'结尾,如果不拷贝'\0'过去,我们输出的结果就会编程hello broxxxxx...直到找到'\0'为止。
        因此,我们上代码:
void my_strcpy(char* dest, char* src)
//dest代表拷贝的目的地,src代表拷贝的来源
{
	while (*src != '\0')//同样的,循环走起来

	{
		*dest = *src;//把来源拷贝到目的地去
		dest++;//拷贝完一个拷贝下一个
		src++;
	}
	*dest = *src;//因为当遇到'\0'之后就会跳出循环
	             //此处我们要把'\0'也拷贝过去
}
int main()
{
	char arr1[20] = "xxxxxxxxx";
	char arr2[] = "hello";
	my_strcpy(arr1, arr2);
	printf("%s\n", arr1);
	return 0;
}

这样,我们的strcpy函数就模拟好了
当然,我们的函数部分还可以继续优化

void my_strcpy(char* dest, char* src)
{
	while (*dest++=*src++)

	{
		;
	}
}

这个就是优化后的函数部分的版本,这样写更简单,在这里就不解释啦!


以上就是这期博客的所有内容啦,希望看完的你可以在从中学到一些东西,走之前别忘记了点赞和关注哦!!!


posted @ 2021-10-07 21:33  背包Yu  阅读(3)  评论(0编辑  收藏  举报  来源