学习了c语言我们知道strlen
函数接受一个 char
类型的指针作为参数,该指针指向一个以空字符 '\0'
结尾的字符串。函数会从这个指针开始,逐个字符地向后遍历,直到遇到空字符 '\0'
为止,然后返回从字符串开始到空字符之前的字符数量。
这是它的原型:
size_t strlen(const char *str);
其中,字符串以 '\0' 作为结束标志,strlen函数返回的是在字符串中 '\0' 前⾯出现的字符个数(不包 含 '\0' )。参数指向的字符串必须要以 '\0' 结束。注意函数的返回值为size_t,是⽆符号的。
然后我们来尝试下自己模拟实现一下strlen函数。
法一(计数器法)
size_t my_strlen(char* p)/*利用指针从字符串首元素地址开始历遍字符串*/
{
int count = 0;
while (*p != '\0')
{
count++;
p++;
}/*在读到\0之前,每读到一个字符,次数加一*/
return count;/*最后次数即为字符串长度*/
}
int main()
{
char arr[] = "abcdef";
size_t t = my_strlen(arr);
printf("%zd\n", t);
return 0;
}
法二(指针-指针法)
size_t my_strlen(char* p)
{
char* start = p;创建一个指针来表示字符串首元素地址
while (*p != '\0')
{
p++;
}让原指针历遍字符串,得到字符串最后一个元素地址
return p - start;两指针相减即为字符串元素个数,即长度
}
int main()
{
char arr[] = "abcdef";
size_t t = my_strlen(arr);
printf("%zd\n", t);
return 0;
}
法三(递推法)
size_t my_strlen(char* p)
{
if (*p != '\0')
return 1 + my_strlen(p + 1);/*通过访问字符串每一个字符,只要该字符不为\0长度为一,再加上对剩下字符串的函数调用结果*/
else
return 0;
}
int main()
{
char arr[100];
scanf("%s", &arr);
size_t t = my_strlen(arr);
printf("%zd\n", t);
return 0;
}
以上是一些可行的方法,希望能加强大家对strlen函数的理解。