3种方法实现strlen函数
在我们使用C语言写代码时,我们常常会用到strlen函数,你是否好奇过strlen是如何实现的呢?接下来,我将会使用3中方法实现strlen函数。
文章目录
- 1.计数器法
- 2.递归法
- 3.指针减指针法
1.计数器法
计数器法应该是最常见的strlen实现方法,其基本原理就是通过计数器计算循环的次数,从而实现计算字符串长度的作用
//#include<stdio.h>
//#include<assert.h>
//int my_strlen(const char *str)
//{// assert(str);
// int count = 0;
// while (*str++ != 0)
// {// count++;
// }
// return count;
//}
//
//int main()
//{// char arr[] = {"abcdef"};
// int ret = my_strlen(arr);
// printf("%d", ret);
// return 0;
//}
1.为了防止字符串被改变,于是使用const来保护字符串,增加代码的健壮性
2.使用assert断言是为了防止传过来的是空指针
2.递归法
递归法的主要思想就是要判断第一字符是不是\0,如果不是就1+下一次函数实现,总的来说就是大事化小的思想。
//递归实现strlen
#include<stdio.h>
int my_strlen(char*str)
{if ((*str) != '\0'){return 1 + my_strlen(str + 1);}elsereturn 0;
}
int main()
{char arr[] = {"abcdef"};printf("%d", my_strlen(arr));return 0;
}
3.指针减指针法
首先需要明确,指针减去指针得到的是什么?是这两个元素之间的数据的个数。
要使用指针相减,就要找到字符串的初末指针,只可以通过寻找\0来实现
//用指针减指针来实现strlen的功能
#include<stdio.h>
int my_strlen(char* str)//str接收首元素a的地址
{char* start = str;//start里面装的是首元素a的地址while (*str != '\0')//解引用指针str,或者写成while(*str)---真(更好){str++;//指针/地址++,str是个指针变量}return str - start;//指针减指针为两个指针之间元素的个数
}
int main()
{int len = my_strlen("abc");printf("%d", len);return 0;
}
以上就是strlen的3种实现方法,一个我们平时习以为常的库函数却有3种实现方,完全不一样的实现逻辑,这或许就编程的乐趣吧!
3种方法实现strlen函数相关推荐
- C++对类中字符串成员进行初始化的两种方法以及友元函数的使用
在C++之中,如果要建立一个类,且类中需要有字符串数据成员,我们可以把该成员声明成两种类型. 第一种方法:使用头文件string,把字符串数据成员声明为string类的对象,用这种方法对字符串操作十分 ...
- JavaScript两种方法来定义一个函数
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- 求互质数对的两种方法:欧拉函数和容斥原理
1.HDU4135 首先,我们可以先求出1 ~ a - 1内与n互质的数,再求出1 ~ b内与n互质的数.最后利用前缀和算出来即可. #include <iostream> #includ ...
- C语言实现strlen的三种方法
目录 1.strlen介绍 strlen --- 求字符串长度 2.如何使用strlen库函数 3.三种方法实现strlen 计数器法: 递归法: 指针-指针法: 4.关于strlen返回值 1.st ...
- 怎么用python读取csv文件、并且是读取行-python读取csv文件指定行的2种方法详解...
csv是Comma-Separated Values的缩写,是用文本文件形式储存的表格数据,比如如下的表格 就可以存储为csv文件,文件内容是: No.,Name,Age,Score 1,Apple, ...
- python读取csv文件的方法-python读取csv文件指定行的2种方法详解
csv是Comma-Separated Values的缩写,是用文本文件形式储存的表格数据,比如如下的表格 就可以存储为csv文件,文件内容是: No.,Name,Age,Score 1,Apple, ...
- oracle中有类似split的方法么,ORACLE中字符串split的一种方法
一种方法是用函数:这里转帖网上摘抄的一个函数 CREATE OR REPLACE TYPE str_split IS TABLE OF VARCHAR2 (4000); CREATE OR REPLA ...
- SQL注入攻击讲解及PHP防止SQL注入攻击的几种方法
毕业开始从事winform到今年转到 web ,在码农届已经足足混了快接近3年了,但是对安全方面的知识依旧薄弱,事实上是没机会接触相关开发--必须的各种借口.这几天把sql注入的相关知识整理了下,希望 ...
- php获取打开网页文件名,php取得当前访问url文件名的几种方法
php下获取当前访问的文件名的几种方法. 推荐函数: 一是PHP获取当前页面的网址: dedecms用的也是这个哦. //获得当前的脚本网址 function GetCurUrl() { if(!em ...
最新文章
- 实用ListView加载提示工具类
- Mysql+Mybatis分页查询——数据库系列学习笔记
- netty源码解解析(4.0)-2 Chanel的接口设计
- servlet设置cookie实验
- java名 java_Java Syncrhonisers
- 【算法分析与设计】实验 分治算法解决中位数问题
- SSH框架中怎么使用Hibernate查询一个对象
- bucket sort sample sort 并行_Java 中 Arrays.sort 和 Arrays.parallelSort 哪个更快?
- android Notification 的使用
- Nginx常见错误码解决方案
- 麦马计算机专业对化学的要求,2018麦克马斯特大学最新入学要求+热门专业全解析...
- iis服务器网站指向ip地址,IIS之Web服务器 一个IP地址对应多个Web站点 多个域名...
- 腾讯校招难度升级,笔试刷人超80%,最“简单”的试题把网友看哭了
- 中望3d快捷键命令大全_中望CAD常用快捷键集合
- 配置管理之三类配置库
- 谷歌测试工具_使用Google网站优化工具进行A / B测试的指南
- java,png,jpg,多张图片合成一个pdf,压缩图片,并且保证图片不失帧。
- Python学习(4)——数学类问题解答
- 一次日歪了的渗透测试
- C C++ 调用第三方DLL库失败 LoadLibrary 返回NULL 并报 126 错误 解决办法
热门文章
- 菜鸟教程python3 mysql_Python3 MySQL 数据库连接 | 菜鸟教程
- 从5G+AI到ChatGPT火爆全网,且有望带来5G消息的业务重构!
- Mysql 检查表是否存在并创建表,检查列是否存在并新增、修改、删除列
- HBASE中的compaction策略,日期分层
- strsep() 函数
- 概论_第3章_正态分布的重要结论__正态分布与标准正态分布关系
- 气相色谱仪分析常用的色谱定量方法有哪些?
- 物联网工程专业的迷茫与抉择
- 算法训练 数字三角形
- SSM+科技馆预约系统 毕业设计-附源码182154