目录
1.简单分析:
实现库函数strlen需要传入字符串首元素地址,返回字符个数(不包括\0)下面我用三种方法实现
2.第一张方法:
计数法,创建一个变量count,每次找到一个字符,count就+1,直到遇到'\0',最后count就是字符串的个数。
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
int my1_strlen(const char* arr) //方法一:计数法
{
assert(arr);
int count = 0;
while (*arr != '\0')
{
count++;
arr++;
}
return count;
}
int main()
{
char arr[10] = { "asdfg" };
int ret1 = 0;
ret1 = my1_strlen(arr);
printf("%d\n", ret1);
system("pause");
return 0;
}
3.第二种方法:
指针相减法,指针遍历到'\0'处,减首地址,就是元素的个数。
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
int my2_strlen(const char* arr) //方法二:指针相减法
{
assert(arr);
char* start = arr;
while (*arr != '\0')
{
arr++;
}
return arr - start;
}
int main()
{
char arr[10] = { "asdfg" };
int ret2 = 0;
ret2 = my2_strlen(arr);
printf("%d\n", ret2);
system("pause");
return 0;
}
4.第三种方法:
递归法,每遍历一个字符就return 1 +(此处调用自己);直到遇到'\0'。
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
int my3_strlen(const char* arr) //方法三:递归法
{
assert(arr);
if (*arr != '\0')
{
return 1 + my3_strlen(arr + 1);
}
return 0;
}
int main()
{
char arr[10] = { "asdfg" };
int ret3 = 0;
ret3 = my3_strlen(arr);
printf("%d\n", ret3);
system("pause");
return 0;
}
5.结果: