在代码的题目中,我们经常会遇到需要自己手写函数,求字符串长度的情况,那么今天博主就带大家一起盘点五种求字符串长度的写法
版本一:判断累加法
逻辑:由于字符串的末位是\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;}
编译结果:
写在最后
如果本文对您有帮助,可不可以给我一个小小的点赞呀❤~您的支持是我最大的动力。
博主小白一枚,才疏学浅,难免有所纰漏,欢迎大家讨论和提出问题,博主一定第一时间改正。
谢谢观看嘿嘿(๑•̀ㅂ•́)و✧~!