1.借助中间变量(常规方法)
#include<stdio.h>int my_strlen(char* str)//接收了数组首元素的地址{int count = 0;while (*str != '\0'){count++;str++;//下一元素的地址}return count;}int main(){char arr[] = "haha";printf("%d\n", my_strlen(arr));return 0;}
因为strlen求的是\0之前的字符个数,那么就可以while循环,遇到\0之前都可以count++,所以只需利用指针即可
2.递归方法模拟
递归出口是遇到\0,否则递归就会一直进行下去
int my_strlen(char* str){if (*str != '\0'){return 1 + strlen(str + 1);//str+1指的是下一个字符的地址}else{return 0;}}int main(){char arr[] = "haha";printf("%d\n", my_strlen(arr));return 0;}
3.指针相减法
指针相减得到的是两个指针之间的元素个数(c语言语法所规定的)
所以只需要求数组的第一个字符地址和最后一个字符(‘\0’)的地址就可以求出元素个数
int my_strlen(char* str){char* start = str;//str是数组第一个字符的地址while (*str != '\0'){str++;//总共5个字符,str最终会指向\0}return str - start;}int main(){char arr[] = "haha";printf("%d\n", my_strlen(arr));return 0;}