mystrlen() 的理解和使用
size_t strlen(const char* ptr); #参数ptr是字符串首字母地址
# 应用举例
int main()
{
char *ptr = "hello world";
size_t ret = strlen(ptr);
printf("%zd", ret); // 运行结果为 : 11
return 0;
}
注:
1.字符串以 ‘\0’ 作为结束标志,strlen函数返回的是在字符串中 ‘\0’ 前⾯出 现的字符个数(不包含 ‘\0’ )。
2.参数指向的字符串必须要以 ‘\0’ 结束。
3.注意函数的返回值为size_t,是⽆符号的。
模拟实现方法
- 遍历字符串计数法
size_t my_strlen(const char* str)
{
int count = 0; //计数器
while (*str != '\0')
{
count += 1;
str++;
}
return count;
}
int main()
{
char arr[50] = "hello world";
size_t ret = my_strlen(arr);
printf("%zd\n", ret);
return 0;
}
- 指针运算法
size_t my_strlen(const char* str)
{
const char* start = str; //定义一个指针start赋初值为str,循环自增到字符中末尾的'\0'后停止。
while (*start != '\0')
{
start++;
}
return start - str; //同一类型的指针相减得到的是 两指针间的元素的个数。
}
int main()
{
char arr[] = "hello world";
size_t ret = my_strlen(arr);
printf("%zd\n", ret); // 结果为 11
return 0;
}
3.使用递归方法实现
#include <assert.h>
//使用递归的方法实现
size_t my_strlen(const char* str)
{
assert(str); // 断言空指针
if (*str == '\0')
return 0;
else
return 1 + my_strlen(str + 1);
}
int main()
{
char arr[] = "hello world";
size_t ret = my_strlen(arr);
printf("%zd\n", ret);
return 0;
}
递归方法的理解
注:递归传递的参数,
第一步是 str
第二步是 str +1
第三步是 str + 2
.
.
.
直到参数 *(str+n)==‘\0’ 后;将结果一层层返回