本文里主要会通过3种方法解决该问题:
- while循环,计数器方法
- 递归实现字符统计
- 指针的方法
三种方法由易到难,读者可以自行选择阅读
1.while循环
#include <stdio.h>
#include <string.h>
int my_strlen_my(char* str) {
int count = 0;
while (*str != '\0') {
str++;//每次对str指针进行+1操作,直到遇到字符串结束标志,这里涉及到指针的运算
count++;
return count;
}
}
int main()
{
char arr1[] = { "abcdefg" };
int count = my_strlen_my(arr1);
printf("长度=%d", count);
return 0;
}
这里的思路是arr1里有几个元素,,则计数器count就++几次,最终得到目的,这是最简单的办法
2.递归
递归的一种粗暴的理解就是我已经可以实现该用处,在递归的时候我们可以认为我们的函数my_strlen_my已经可以实现我们的功能,则我们可以将计算整个字符长度简化为第一个字符的长度(1)+剩下字符的长度(my_strlen_my(str+1)),这里的str是数组名,众所周知数组名是第一个数组的地址,
#include <stdio.h>
#include <string.h>
int my_strlen_my(char* str) {
if (*str != '\0')
return 1 + my_strlen_my(str + 1);
/*这里就是默认该函数已经可以完成求长度的任务,说以总长度就是第一个+剩下的长度(我们用函数表示)
*/
else
return 0;
}
int main()
{
char arr1[] = { "abcdefg" };
int count = my_strlen_my(arr1);
printf("长度=%d", count);
return 0;
}
3.指针的方法
我们了解一个知识点,在指针的初级运算里有一种指针减指针的操作,这种操作的本质是先计算两个指针之间的字节数,在除以指针变量所占的字节数,总言之,我们可以利用这个来计算两个指针之间的个数
要计算个数就要知道这两个指针的位置,第一个指针可以是数组名(我们反复强调数组名是第一个元素的地址),接下来代码的重点是如何获取最后的指针,我们的思路是字符串结束标志是“\0”
#include <stdio.h>
#include <string.h>
int my_strlen_my(char* str) {
char* strat = str;
char* end = str;
while (*end != '\0')
end++;//寻找最后的指针让他指向\0;
return end - strat;
}
int main()
{
char arr1[] = { "abcdefg" };
int count = my_strlen_my(arr1);
printf("长度=%d", count);
return 0;
}
以上就是实现strlen的三种方法了,,在标准的库里使用的就是第三种方法