首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >C语言进阶(九) - 字符与字符串函数 - 1 - strlen()

C语言进阶(九) - 字符与字符串函数 - 1 - strlen()

作者头像
怠惰的未禾
发布2023-04-27 21:13:47
发布2023-04-27 21:13:47
5310
举报
文章被收录于专栏:Linux之越战越勇Linux之越战越勇

前言

C语言中有着字符类型,但是没有字符串类型。库函数中有着许多处理字符和字符串的函数供我们使用。 字符串可以放在字符数组中,也可以放在常量字符串中。


1. strlen()函数

1.1 strlen()的函数声明

点击转到cpluscplus.com官网 - strlen

stelen()函数接收一个字符串的地址,返回字符串的长度,返回类型是size_tsize_t类型就是unsigned int类型。

  • 字符串以'\0'作为结束标志,返回的是在字符串中'\0'前面出现的字符个数。不包含字符'\0'
  • 参数指向的字符串必须要以'\0'结束。
  • 函数的返回值是size_t,是无符号的。

2.2 模拟实现

2.2.1 计数法

代码语言:javascript
复制
//模拟实现strlen
#include <stdio.h>
#include <assert.h>

//计数法
size_t my_strlen1(const char* str) {
    //断言,如果str是空指针就报错
	assert(str);
    //记录字符串的长度
	size_t count = 0;
    //一个循环,直到字符串为'\0'时结束循环并停止计数
	while (*str) {
		str++;
		count++;
	}
	return count;
}

int main() {
	char str[] = { "abcdef" };
	int ret1 = my_strlen1(str);
    
	printf("%d\n", ret1);

	return 0;
}

运行结果:

2.2.2 指针相减法

代码语言:javascript
复制
//模拟实现strlen
#include <stdio.h>
#include <assert.h>

//指针相减法
size_t my_strlen2(const char* str){
    //断言,如果str是空指针就报错
	assert(str);
    //创建一个字符指针,指向字符串的首元素
	const char* start = str;
    //如果当前字符不是'\0',指针就指向下一个字符串
	while (*str != '\0') {
		str++;
	}
    //两个指针相减,且是高地址减去低地址,得到二者之间的字符个数
	return str - start;
}

int main() {
	char str[] = "abcdef";

	int ret2 = my_strlen2(str);

	printf("%d\n", ret2);

	return 0;
}

运行结果:

2.2.3 递归法

代码语言:javascript
复制
//模拟实现strlen
#include <stdio.h>
#include <assert.h>

//递归法
size_t my_strlen3(const char* str) {
    //断言,如果str是空指针就报错
	assert(str);
    //递归要有渐进条件和出口。
    //如果当前指针指向字符不是'\0',就要记录并且计算指针指向下一个字符的字符串的大小
    //如果是'\0',就不记录并返回0。
	if (*str) {
		return my_strlen3(str + 1) + 1;
	}
	else {
		return 0;
	}
}

int main() {
	char str[] = "abcdef";

	int ret3 = my_strlen3(str);

	printf("%d\n", ret3);

	return 0;
}

运行结果:

结语

多种方法模拟实现库函数之strlen()


END

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-07-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 1. strlen()函数
    • 1.1 strlen()的函数声明
    • 2.2 模拟实现
      • 2.2.1 计数法
      • 2.2.2 指针相减法
      • 2.2.3 递归法
  • 结语
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档