✨✨欢迎大家来到Celia的博客✨✨
🎉🎉创作不易,请点赞关注,多多支持哦🎉🎉
所属专栏:C语言
目录
引言
strlen函数用于统计字符串中的字符数量(\0前的字符数量),包含在头文件<string.h>中,本篇文章将介绍实现strlen函数的三种方法。
一、计数法
设计思路:
我们可以通过循环遍历整个字符串,循环条件设置为直到遇到 \0 为止,在循环体中创建一个计数器,统计字符的个数。
代码实现:
#include<stdio.h> size_t my_strlen(char arr[])//size_t是一个无符号的整型 { int i = 0; while (arr[i++] != '\0')//遍历数组 { ;//这是一个空语句 } return i - 1;//由于i是后置自增,需要减一 } int main() { char arr[] = { "hello" }; printf("%d", my_strlen(arr)); return 0; }
运行截图:
二、递归法
设计思路:
我们可以向自定义函数中传递数组的首地址,然后通过解引用判断当前指针指向的元素是否为\0,如果是,返回0,如果不是,返回1+(函数调用)。
代码实现:
size_t my_strlen(char *arr) { if (*arr == '\0') return 0; else return 1 + my_strlen(++arr);//记得把指针向后移动一位 } int main() { char arr[] = { "hello,Celia" }; printf("%d", my_strlen(arr)); return 0; }
运行截图:
三、指针法
设计思路:
我们可以创建两个指针变量,刚开始都指向数组的首元素地址,然后让其中一个向后移动,直到遇到\0为止,最后返回两个指针相减的结果。
代码实现:
#include<stdio.h> size_t my_strlen(char *arr) { char* p1 = arr, * p2 = arr;//创建两个指针变量,都指向数组首地址 while (*p2++ != '\0')//解引用判断 { ;//空语句 } return p2 - p1 - 1;//后置自增,需要减一 } int main() { char arr[] = { "hello,Celia!" }; printf("%d", my_strlen(arr)); return 0; }
运行截图: