在我们使用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函数相关推荐

  1. C++对类中字符串成员进行初始化的两种方法以及友元函数的使用

    在C++之中,如果要建立一个类,且类中需要有字符串数据成员,我们可以把该成员声明成两种类型. 第一种方法:使用头文件string,把字符串数据成员声明为string类的对象,用这种方法对字符串操作十分 ...

  2. JavaScript两种方法来定义一个函数

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  3. 求互质数对的两种方法:欧拉函数和容斥原理

    1.HDU4135 首先,我们可以先求出1 ~ a - 1内与n互质的数,再求出1 ~ b内与n互质的数.最后利用前缀和算出来即可. #include <iostream> #includ ...

  4. C语言实现strlen的三种方法

    目录 1.strlen介绍 strlen --- 求字符串长度 2.如何使用strlen库函数 3.三种方法实现strlen 计数器法: 递归法: 指针-指针法: 4.关于strlen返回值 1.st ...

  5. 怎么用python读取csv文件、并且是读取行-python读取csv文件指定行的2种方法详解...

    csv是Comma-Separated Values的缩写,是用文本文件形式储存的表格数据,比如如下的表格 就可以存储为csv文件,文件内容是: No.,Name,Age,Score 1,Apple, ...

  6. python读取csv文件的方法-python读取csv文件指定行的2种方法详解

    csv是Comma-Separated Values的缩写,是用文本文件形式储存的表格数据,比如如下的表格 就可以存储为csv文件,文件内容是: No.,Name,Age,Score 1,Apple, ...

  7. oracle中有类似split的方法么,ORACLE中字符串split的一种方法

    一种方法是用函数:这里转帖网上摘抄的一个函数 CREATE OR REPLACE TYPE str_split IS TABLE OF VARCHAR2 (4000); CREATE OR REPLA ...

  8. SQL注入攻击讲解及PHP防止SQL注入攻击的几种方法

    毕业开始从事winform到今年转到 web ,在码农届已经足足混了快接近3年了,但是对安全方面的知识依旧薄弱,事实上是没机会接触相关开发--必须的各种借口.这几天把sql注入的相关知识整理了下,希望 ...

  9. php获取打开网页文件名,php取得当前访问url文件名的几种方法

    php下获取当前访问的文件名的几种方法. 推荐函数: 一是PHP获取当前页面的网址: dedecms用的也是这个哦. //获得当前的脚本网址 function GetCurUrl() { if(!em ...

最新文章

  1. 实用ListView加载提示工具类
  2. Mysql+Mybatis分页查询——数据库系列学习笔记
  3. netty源码解解析(4.0)-2 Chanel的接口设计
  4. servlet设置cookie实验
  5. java名 java_Java Syncrhonisers
  6. 【算法分析与设计】实验 分治算法解决中位数问题
  7. SSH框架中怎么使用Hibernate查询一个对象
  8. bucket sort sample sort 并行_Java 中 Arrays.sort 和 Arrays.parallelSort 哪个更快?
  9. android Notification 的使用
  10. Nginx常见错误码解决方案
  11. 麦马计算机专业对化学的要求,2018麦克马斯特大学最新入学要求+热门专业全解析...
  12. iis服务器网站指向ip地址,IIS之Web服务器 一个IP地址对应多个Web站点 多个域名...
  13. 腾讯校招难度升级,笔试刷人超80%,最“简单”的试题把网友看哭了
  14. 中望3d快捷键命令大全_中望CAD常用快捷键集合
  15. 配置管理之三类配置库
  16. 谷歌测试工具_使用Google网站优化工具进行A / B测试的指南
  17. java,png,jpg,多张图片合成一个pdf,压缩图片,并且保证图片不失帧。
  18. Python学习(4)——数学类问题解答
  19. 一次日歪了的渗透测试
  20. C C++ 调用第三方DLL库失败 LoadLibrary 返回NULL 并报 126 错误 解决办法

热门文章

  1. 菜鸟教程python3 mysql_Python3 MySQL 数据库连接 | 菜鸟教程
  2. 从5G+AI到ChatGPT火爆全网,且有望带来5G消息的业务重构!
  3. Mysql 检查表是否存在并创建表,检查列是否存在并新增、修改、删除列
  4. HBASE中的compaction策略,日期分层
  5. strsep() 函数
  6. 概论_第3章_正态分布的重要结论__正态分布与标准正态分布关系
  7. 气相色谱仪分析常用的色谱定量方法有哪些?
  8. 物联网工程专业的迷茫与抉择
  9. 算法训练 数字三角形
  10. SSM+科技馆预约系统 毕业设计-附源码182154