【C】库函数之strlen

Get string length

  Returns the length of the C string.

  The length of a C string is determined by the terminating null-character: A c string is as long as the number of characters between the beginning of the string and the terminating null character (without including the terminating null character itself).

  上述内容是C++官网对strlen函数的介绍,可以看出strlen函数用于计算字符串的长度,与字符串开头和终止空字符之间的字符数相同(不包括终止空字符本身)。

  接下来给出4种实现strlen函数的方法:

1.创建临时变量作为计数器计数

/*
*	函数名称:MyStrlen
*
*	函数功能:返回C字符串的长度
*            方法1:创建临时变量作为计数器计数
*
*	入口参数:str
*
*	出口参数:length
*
*	返回类型:int
*/

int MyStrlen(const char * str)
{
	int length = 0;

	assert(NULL != str);

	while ('\0' != *str)
	{
		length++;
		str++;
	}

	return length;
}

2.指针-指针

/*
*	函数名称:MyStrlen
*
*	函数功能:返回C字符串的长度
*            方法2:指针-指针
*
*	入口参数:start
*
*	出口参数:end - start
*
*	返回类型:int
*/

int MyStrlen(const char * start)
{
	const char * end = start;

	assert(NULL != start);

	while ('\0' != *end)
	{
		end++;
	}

	return (end - start);
}
3.递归
/*
*	函数名称:MyStrlen
*
*	函数功能:返回C字符串的长度
*            方法3:不创建临时变量,使用递归
*
*	入口参数:str
*
*	出口参数:0 or 1+MyStrlen(str+1)
*
*	返回类型:int
*/

int MyStrlen(const char * str)
{
	assert(NULL != str);

	if ('\0' == *str)
	{
		return 0;
	}
	else
	{
		return (1 +	MyStrlen(str+1));
	}
}

4.一行代码实现strlen

  利用逗号表达式以及三目操作符即可实现,实际上还是递归。

/*
*	函数名称:MyStrlen
*
*	函数功能:计算字符串长度
*
*	入口参数:str
*
*	出口参数:0 or 1 + MyStrlen(str + 1)
*
*	返回类型:int
*/

int MyStrlen(const char * str)
{
	return assert(NULL != str), '\0' == *str ? 0 : 1 + MyStrlen(str + 1);
}

主函数

#define _CRT_SECURE_NO_WARNINGS 1

/*
* Copyright (c) 2018, code farmer from sust
* All rights reserved.
*
* 文件名称:MyStrlen.c
* 功能:返回C字符串的长度,
*      C字符串的长度与字符串开头和终止空字符之间的字符数相同(不包括终止空字符本身)
*
* 当前版本:V1.0
* 作者:sustzc
* 完成日期:2018年4月20日13:54:49
*/

# include <stdio.h>
# include <assert.h>

int main(void)
{
	char *str = "abcdef";

	printf("string length: %d\n", MyStrlen(str));

	return 0;
}

输出结果


猜你喜欢

转载自blog.csdn.net/sustzc/article/details/80018002
今日推荐