【C语言】模拟实现 strlen 函数写一个 my_strlen 函数的常规写法与递归写法

我们知道 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;
}

那么来运行一下,结果正确:

猜你喜欢

转载自blog.csdn.net/Miss_Monster/article/details/81326002