我们知道 strlen 函数是求字符串长度的,当一个字符串传给这个函数的时候,他就可以计算出这个字符串的长度。
一个字符串的结束标志是 ‘\0’,所以要模拟实现这个函数并不算难。
我们只需要创建一个计数器,和一个指针变量,一开始指针变量指向字符串的开始,while循环走起来指针变量向后走,每走一个,指针变量指向的字符串+1,计数器也+1,那么当指针变量一直走到最后,加到了‘\0’,就是说这个字符串结束了,只有这么多了,那么计数器也就可以停下来了,这时候返回这个计数器的值就是我们需要的字符串长度啦~这种方法是要创建临时变量count计数器的,也就是我们说的常规写法。代码如下:
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
int my_strlen(const char*str)
{
assert(str != NULL);
int count = 0;
while (*str != '\0')
{
count++;
str++;
}
return count;
}
int main()
{
char* p = "abcdefg";
int len=my_strlen(p);
printf("len = %d", len);
system("pause");
return 0;
}
只会这种写法是不够的,因为在腾讯的面试题中就考过,strlen的常规写法与递归写法。那么接下来我们来写递归写法
递归的思想就是把大事化小。那么求一个字符串的长度,用“abcdefg”举个栗子, 这个字符串,a占了一个长度,我们可以理解为:这个字符串的总长度=第一个字符的长度(也就是1)+后面剩余字符串的长度,再一次一次的循环,直到str指向‘\0’。那么代码如下:
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
int my_strlen(const char*str)
{
assert(str != NULL);
if (*str != '\0')
return 1 + my_strlen(str + 1);
else
return 0;
}
int main()
{
char* p = "abcdefg";
int len=my_strlen(p);
printf("len = %d", len);
system("pause");
return 0;
}
那么来运行一下,结果正确: