目录
先看整体代码把,下面有解释奥!
//模拟实现库函数strlen//计算字符长度
//int my_strlen(char* xm)
//{
// int count = 0;
// while (*xm != '\0')
// {
// xm = xm + 1;
// count++;
// }
// return count;
//}第二个方法递归法
//int my_strlen(char *xm)
//{
// if (*xm != '\0')
// {
// return 1 + my_strlen(xm + 1);
// }
// else
// {
// return 0;
// }
//}方法三指针减指针法
int my_strlen(char *xm)
{
char* start = xm;
int count = 0;
while (*start != '\0')
{
start++;
}
return start - xm;
}
int main()
{
char arr[] = "mazeqi";
printf("字符长度为:%d", strlen(arr));
return 0;
}
方法一(遍历法)
//模拟实现库函数strlen//计算字符长度
int my_strlen(char* xm)
{
int count = 0;
while (*xm != '\0')
{
xm = xm + 1;
count++;
}
int main()
{
char arr[] = "mazeqi";
printf("字符长度为:%d", my_strlen(arr));
return 0;
}
第一个方法,顾名思义就是输入一个字符串,然后一位一位统计出个数,这个方法需要用到指针,将arr字符首元素传入函数中,用xm接收,因为字符串是以\0 结尾,所以用xm = xm + 1,可以取出每一位字符的地址,直到\0 结束,每一次用count++统计即可。
方法二(函数递归)
int my_strlen(char *xm)
{
if (*xm != '\0')
{
return 1 + my_strlen(xm + 1);
}
else
{
return 0;
}
}
int main()
{
char arr[] = "mazeqi";
printf("字符长度为:%d", my_strlen(arr));
return 0;
}
这个方法首先要知道递归的使用方法,然后还是要利用字符串中\0 结尾,当字符串还没统计到\0时,递归中一直重复1+my_strlen(xm+1),直到统计到\0,return 0,之后递归返回总的字符长度。
方法三(地址相减法)
int my_strlen(char *xm)
{
char* start = xm;
int count = 0;
while (*start != '\0')
{
start++;
}
return start - xm;
}
int main()
{
char arr[] = "mazeqi";
printf("字符长度为:%d", strlen(arr));
return 0;
}
这个方法,首先你要知道,一个指针(地址)- 一个指针等于什么,两个指针相减,结果是两个指针中间的元素个数,理解了相减之后,就可以构思代码,首先将arr首元素地址赋予xm上,还是得用遍历的方法,每有一个字符那start的地址+1直到遇到\0 ,最后再用start - xm即可算出中间相差的元素个数