c语言求字符串的长度——四种方式
1.利用strlen函数.
注:strlen函数在使用之前要引头文件#include<string.h>
#include<stdio.h>
#include<string.h>
int main()//一般方法
{
char arr[] = "bit102";
printf("%d ", strlen(arr));
return 0;
}
2.利用自定义函数
#include<stdio.h>
#include<string.h>
int 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<stdio.h>
#include<string.h>
int 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;
}
指针-指针等于两个指针之间的元素个数;利用指针的运算得到字符串的长度;