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>
int main()
{
char ch[20] = "abcdef";
int ret=strlen(ch);
printf("%d\n", ret);
return 0;
}
//输出的结果是:6 //或者我们可以使用gets函数来输入自己想要的字符
代码模拟实现strlen函数:
我们知道,字符串的结尾都有一个’\0’,这个就是字符串结尾的标志。 那我们的思路就是,定义一个count变量来统计字符串长度,我们一个一个字符往后找,如果找到的字符不是’\0’那我们的count++一下,到最后,count的数就是我们所求的字符串长度啦! 上代码:
size_t my_strlen(char* str)
{
int count = 0;
while (*str != '\0')
{
str++;
count++;
}
return count;
}
int main()
{
char ch[20] = "abcdef";
int ret = my_strlen(ch);
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)
{
while (*src != '\0')
{
*dest = *src;
dest++;
src++;
}
*dest = *src;
}
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++)
{
;
}
}
这个就是优化后的函数部分的版本,这样写更简单,在这里就不解释啦!
以上就是这期博客的所有内容啦,希望看完的你可以在从中学到一些东西,走之前别忘记了点赞和关注哦!!!
|