【C语言字符串函数】strlen的三种模拟实现(附详细逻辑) 您所在的位置:网站首页 如何用strlen函数 【C语言字符串函数】strlen的三种模拟实现(附详细逻辑)

【C语言字符串函数】strlen的三种模拟实现(附详细逻辑)

2024-07-01 07:26| 来源: 网络整理| 查看: 265

一、方法一(计数器) (一)代码思路

通过遍历字符串中的字符,并计数,直到遇到字符串的结束符为止,从而得到字符串的长度。

(二)代码实现 size_t my_syrlen(const char* str) { size_t count = 0; assert(str != NULL); while (*str) { count++; str++; } return count; } (三)详细逻辑 声明并初始化一个变量 count,用于记录字符串的长度,初始值为0。使用断言 assert(str != NULL) 来确保传入的字符串指针不为空,以防止出现空指针异常。进入循环,条件为 *str,即只要当前字符不是字符串的结束符('\0'),就执行循环体内的操作。在循环体内,每次循环都将 count 自增1,表示已经遍历过一个字符。将指针 str 向后移动一个位置,以便处理下一个字符。循环结束后,返回计数器 count 的值,即得到了字符串的长度 二、方法二(指针相减) (一)代码思路

通过将指针从字符串的起始位置移动到结束位置,然后计算两个指针之间的偏移量,从而得到字符串的长度。这种方法利用了指针的算术运算,避免了使用计数器,从而减少了代码的复杂性。

(二)代码实现 size_t my_syrlen(const char* str) { const char* start = str; assert(str != NULL); while (*str) { str++; } return str - start; } (三)详细逻辑 声明并初始化一个指针变量 start,将其指向传入的字符串 str 的起始位置。使用断言 assert(str != NULL) 来确保传入的字符串指针不为空,以防止出现空指针异常。进入循环,条件为 *str,即只要当前字符不是字符串的结束符('\0'),就执行循环体内的操作。在循环体内,将指针 str 向后移动一个位置,以便处理下一个字符。/循环结束后,返回指针 str 与起始指针 start 之间的偏移量,即可得到字符串的长度。 ​​​​​​三、方法三(递归) (一)代码思路

如果当前字符是结束符,则返回0;否则,递归调用函数本身,并将指针向后移动一个位置,然后将返回结果加上1。递归调用会一直进行,直到遇到结束符,然后从最深层的递归返回,并依次累加长度,最终得到字符串的长度。

(二)代码实现 size_t my_syrlen(const char* str) { if (*str == '\0') return 0; else return 1 + my_syrlen(str + 1); } (三)详细逻辑 首先检查当前字符是否为字符串的结束符('\0')。如果是结束符,则返回0,表示字符串为空,长度为0。如果不是结束符,执行递归调用。递归调用的参数是字符串指针 str 加上1,即指向下一个字符的位置递归调用返回的结果加上1,表示当前字符的长度。最终返回的是所有字符长度的累加结果。  


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有