strlen的概念
C语言 strlen 函数用来求字符串的长度(包含多少个字符)。 strlen () 函数从字符串的开头位置依次向后计数,直到遇见 0 ,然后返回计时器的值。 最终统计的字符串长度不包括 0 。
strlen的使用
strlen的基本功能: size_t strlen(const char*str);
1.字符串用’\0’作为结束标志,strlen函数返回的是在字符串中’\0’前面出现的字符个数(不包括’\0’)
2.参数指向的字符串必须要从’\0’结束
3.注意函数的返回值为size_t,是无符号的(等价于 unsigned int)
4.学会strlen函数的模拟实现
strlen的三种模拟实现
1.计数器方法
计算器方法是通过找字符里里面不是’\0’的数,找到一个就使用count+1,count从0开始,最终达到计数的效果。
#include <stdio.h>
#include <assert.h>
size_t my_strlen(const char* str)
{
size_t count = 0;
assert(str); //声明,防止arr传过来空指针,需要包含头文件 #include <assert.h>
while (*str != '\0')
{
count++;
str++;
}
return count;
}
int main()
{
char arr[] = "abcdef";
size_t n = my_strlen(arr);
printf("%d\n", n);
}
2.指针-指针
先拿到’\0’的地址,再拿到起始位置的地址,两个指针相减就是中间的元素个数。
#include <stdio.h>
#include <assert.h>
size_t my_strlen(char* str)
{
char* start = str; //将起始地址赋值给start
assert(str);
while (*str != '\0')
{
str++; //此时str移动到了'\0'的地址停下
}
return (str - start); //两个指针相减就是元素个数
}
int main()
{
char arr[] = "abcdef";
size_t n = my_strlen(arr);
printf("%d\n", n);
}
3.递归的实现
我们想象一下,当第一个字符是’\0’的话,字符长度就是0,所以我们认为一个字符串起码不是’\0’,
- 假设我们的字符串是 abc, 第一个字符串不是’\0’ 的话长度至少是1,所以就可以写成 1 + my_strlen(‘bc’)的长度。
- my_strlen(‘bc’)求字符串的时候,第一个字符是b,就可以写成,1+1+my_strlen(‘c’)
3 my_strlen(‘c’)求字符串长度的时候,第一个字符是c,所以可以1+1+1+my_strlen(‘\0’);
4.求my_strlen(‘\0’)时,第一个字符就是’\0‘,长度就是0,写成 1+1+1+0
5.最后 1+1+1+0 =3,3就是字符串的长度。
#include <stdio.h>
#include <assert.h>
size_t my_strlen(const char* str)
{
assert(str);
if (*str != '\0')
{
return 1 + my_strlen(str + 1); //str指向a的地址,str+1就指向b的地址,从b的地址向后查找就是bc;
}
else
{
return 0;
}
}
int main()
{
char arr[] = "abcdef";
size_t n = my_strlen(arr);
printf("%d\n", n);
}
今天的分享到这里就结束,希望对你有所帮助,如果对你有所帮助,我将荣幸之至。
天高海阔路漫长,我们来日方长,回见!