在代码的题目中,我们经常会遇到需要自己手写函数,求字符串长度的情况,那么今天博主就带大家一起盘点五种求字符串长度的写法

版本一:判断累加法

逻辑:由于字符串的末位是\0,且\0不计入字符串长度,那么可以利用指针来逐个判断字符串的内容,不是\0就累加1,遇到\0就停止,最后返回累加的数值即可求出字符串长度。
代码示范:

//版本1 int my_strlen (char *p){int count = 0;while (*p != '\0')//解引用p,判断是否为\0{count++;//累加p++;//指针指向下一位字符内容}return count;//返回累加的数值即为字符串长度}int main(){char arr[] = "abcdefg";int len = my_strlen(arr);printf("字符串长度为:%d\n", len);return 0;}

编译结果:

版本二:递归法

原理:和判断累加的原理一样,也是判断\0然后进行累加,只不过用了递归的方法,递归就需要在return上面做文章了,先递出去,不断地嵌套my_strlen函数,同时将p不断向前移动判断下一位;再归回来,把每次的移动都+1+1+1,这样也可以判断出字符串的长度。
代码示范:(主函数是一样的,在上面示范的有,故只展示自定义函数)

int my_strlen (char *p){if (*p == '\0')return 0;elsereturn 1 + my_strlen(p+1) ;}

编译结果:

版本三:移动相减法

原理:先将p移动到字符串末位,然后减去第一位的地址,地址之差就是字符串的长度
代码示范:

int my_strlen(char* p){char* start = p;while (*p != '\0'){p++;}return p - start;}

编译结果:

版本四:移动相减法 · 改

原理:将循环的条件改为*p,因为如果到最后一位\0,就等于0,while循环直接结束,比版本三更简洁一些
代码示范:

int my_strlen(char* p){char* start = p;while (*p){p++;}return p - start;}

编译结果:

版本五:移动相减法 · 改 · 改

原理:将while的条件改为*p++,后面的运行语句置空,这样一来同样可以运行代码,但是由于最后一次while循环会多执行一次判断句,也就是p会++,所以需要在return返回的时候减去1,这样才能得到正确的代码结果。
代码示范:

int my_strlen(char* p){char* start = p;while (*p++);return p - start-1;}

编译结果:

写在最后

如果本文对您有帮助,可不可以给我一个小小的点赞呀❤~您的支持是我最大的动力。

博主小白一枚,才疏学浅,难免有所纰漏,欢迎大家讨论和提出问题,博主一定第一时间改正。

谢谢观看嘿嘿(๑•̀ㅂ•́)و✧~!