c语言求字符串的长度——四种方式

1.利用strlen函数.

注:strlen函数在使用之前要引头文件#include

#include#includeint main()//一般方法{char arr[] = "bit102";printf("%d ", strlen(arr));return 0;}

2.利用自定义函数

#include#includeint my_strlen(char* str)//数组需要定位,所以创建指针变量//用自定义函数求字符串的长度{int c = 0;while (*str != '\0'){c++;str++;}return c;}int main(){char arr[] = "bit";printf("%d ", my_strlen(arr));return 0;}

3.利用函数的递归

#include#includeint my_strlen(char* str){if (*str != '\0'){return 1 + my_strlen(str + 1);//str+1代表着数组的下标.}else{return 0;}}int main(){char arr[] = "bit";printf("%d ", my_strlen(arr));return 0;}

在这里为什么不使用str++或++str来代替str+1呢?

原因如下:(1)首先要知道这个程序中递归的原理:my_strlen(“bit”)=1+my_str_len(“it”)=1+1+my_strlen(“t”)=1+1+1+my_strlen(“\0”)=1+1+1+0=3 所以每次递归都是将字符的第一位与\0进行比较,因此str+1则是将比较过后的第一位去掉,然后进行下一次的比较,并且下一次仍然是比较第一位与\0的关系,同时去掉已经比较过的字符,所以str在这个过程中是不变的。那么如果使用str++,就会造成str自增,那么会导致str的值发生变化,不能达到递归的效果。(自己的理解)

4.利用指针运算

int my_strlen(char* str){char*start = str;while (*str != '\0'){str++;}return str - start;}int main(){int len = my_strlen("abc");printf("%d ", len);return 0;}

指针-指针等于两个指针之间的元素个数;利用指针的运算得到字符串的长度;