大家好,我是苏貝,本篇博客带大家了解C语言中自定义实现strlen函数的3种方法,如果大家觉得我写的不错的话,可以给我一个赞👍吗,感谢❤️
一. 了解strlen函数。
函数原型:size_t strlen( const char string ); //求string的长度
头文件 :#include<string.h>
返回值 :返回的是第一个目的数字的首地址,类型为char
注意:
1.每个字符串结尾处都隐藏有 ‘\0’ ,它是字符串的结束标志
2.strlen遇到 ‘\0’ 时停止,字符串长度为 ‘\0’ 之前的字符个数,不包括 ‘\0’ 。
3.size_t可以认为是无符号整型,用%zd或者%u来接收
若想更详细地了解strlen函数,请点击该链接
二. my_stelen
1.计数器
这是3种方法里面最简单的一种,只用将数组作为函数参数,再用 i充当数组下标,若arr[i]不是转义字符 ‘\0’ ,i++,计数器count++;直到为 ‘\0’ 时,返回计数器count
size_t my_strlen(char arr[])
{
int i = 0;
size_t count = 0;
while (arr[i] != '\0')
{
count++;
i++;
}
return count ;
}
int main()
{
char arr[] = "abcdefg";
size_t len = my_strlen(arr);
printf("%zd", len);
return 0;
}
//7
2.递归(不用创造临时变量)
将数组作为函数实参,实际上传过去的是数组首元素地址,用指针接收变量str接收,对str进行解引用操作找到str指向的字符,若该字符为 ‘\0’ ,则返回0;否则返回1+my_strlen(str + 1),再进入my_strlen函数时,str指向下一位,继续上述判断。
例如:若下面代码中char arr[ ]=“ab”,将数组名arr作为函数实参,用指针str接收,此时str指向数组首元素即字符a。对指针str进行解应用str=a,a!= ‘\0’ ,所以函数返回1+my_strlen(str + 1),再进行下一次递归, 此时str指向下一位字符b。对指针str进行解应用str=b,b!= ‘\0’ ,所以函数返回1+my_strlen(str+1),再进行下一次递归, 此时str指向下一位字符 ‘\0’ 。对指针str进行解应用*str= ‘\0’ ,所以函数返回0,接着返回上一次递归,此时str指向字符b,my_strlen(str + 1) 的结果为0,所以1+my_strlen(str + 1)的结果=1并再将1返回上一次递归。此时str指向字符a,my_strlen(str + 1)的结果=1,所以1+my_strlen(str + 1)结果=2,将2作为最后的值返回。
size_t my_strlen(char* arr)
{
if (*arr == '\0')
return 0;
else
return 1 + my_strlen(arr + 1);
}
int main()
{
char arr[] = "abcdefg";
size_t len = my_strlen(arr);
printf("%zd", len);
return 0;
}
3.指针(指针-指针的差值的绝对值是它们之间的元素个数)
若想详细了解 指针-指针,请点击该链接文章来源:https://www.toymoban.com/news/detail-647035.html
思想:只要最后指针str指向的是 ‘\0’ ,指针start指向的是数组首元素a,那么str - start就是字符串长度
创建指针变量start存放数组首元素地址(str就是数组首元素地址),再用while循环使得str最后指向 ‘\0’ ,返回两指针的差值文章来源地址https://www.toymoban.com/news/detail-647035.html
size_t my_strlen(char* str)
{
char* start = str;
while (*str != '\0')
{
str++;
}
return str - start;
}
int main()
{
char arr[] = "abcdefg";
size_t len = my_strlen(arr);
printf("%zd", len);
return 0;
}
好了,那么本篇博客就到此结束了,如果你觉得本篇博客对你有些帮助,可以给个大大的赞👍吗,感谢看到这里,我们下篇博客见❤️
到了这里,关于【C语言】自定义实现strlen函数的3种方法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!