模拟实现strlen函数
strlen函数
首先我们需要了解一下strlen函数,它是C语言的一个库函数,使用它需要引用**#include <string.h>**
1.strlen函数功能
该函数的功能为计算所给字符串的长度,即’\0’之前的字符个数。
2.strlen函数原型
size_t strlen(const char* str);
可以看到strlen函数的返回类型是size_t,即无符号整型,该函数的参数为const char* str,即一个字符指针,指向所计算字符串的首字符的地址。
3.strlen函数使用示例
#include <stdio.h>
int main()
{
char arr[] = "abcdef";
char* p = "abcdef";
int ret = strlen(arr);
int ret2 = strlen(p);
printf("%d\n", ret);
printf("%d\n", ret2);
return 0;
}
模拟实现strlen函数
方法一:计数器法
//1.计数器
#include <stdio.h>
int my_strlen(char* arr)
{
int count = 0;
while (*arr) //如果指针指向的不是0,则count++,且指针向后移动一步
{
count++;
arr++;
}
return count;
}
int main()
{
char* arr = "abcdef";
int ret = my_strlen(arr);
printf("%d\n", ret);
return 0;
}
- 这种方法的思路就是,遍历所给的字符串,如果没有遇到’\0’,则count++,如果遇到’\0’,则跳出循环,计数结束。
方法二:函数递归法
3.递归
#include <stdio.h>
int my_strlen(char* arr)
{
if (*arr == 0) //如果指针指向的字符为0,则返回0,此时,计数结束
{
return 0;
}
else //如果指针指向的字符不为0,则arr++,并返回1 + my_strlen(arr)
{
arr++;
return 1 + my_strlen(arr);
}
}
int main()
{
char* arr = "abcdef";
int ret = my_strlen(arr);
printf("%d\n", ret);
return 0;
}
- 思路:一个字符串的长度等于1加上除去第一个字符剩余的字符串的长度。
方法三:指针减指针
#include <stdio.h>
int my_strlen(char* arr)
{
char* p = arr; //利用指针p来记录字符串的初始位置
while (*arr) //如果指针指向字符不为0,则arr++,知道找到'\0'
{
arr++;
}
return arr - p; //出了循环后,arr指向的是'\0',此时arr - p 即字符串的长度
}
int main()
{
char* arr = "abcdef";
int ret = my_strlen(arr);
printf("%d", ret);
return 0;
}
- 思路:指针减去指针得到的是两个指针之间的元素个数。
感谢阅读,欢迎指正