C_字符串库函数的实现
本文实现了对C_字符串常用库函数进行了实现,更新中...
size_t stlren(const char *)
#include <stdio.h>
#include <string.h>
// 自定义函数指针
// 赋值:strlenPtr func=strlen;将函数strlen的地址赋值给函数指针strlenfunc
// 调用:size_t len=func(str);
typedef size_t (*strlenPtr)(const char *);
// 库函数strlen的函数原型:size_t strlen(const char *str);
// 我的实现
// 方法1:计数器的方式
size_t my_strlen1(const char *str)
{
size_t count = 0;
while (*str != '\0')
{
count++; /* 字符计数 */
str++; /* 指针后移一个位置 */
}
return count;
}
// 方法2:递归的方式
size_t my_strlen2(const char *str)
{
// 递归终止条件
if (*str == '\0')
{
return 0;
}
else
{
// 若当前字符不是'\0',查看下一个字符
// 将下一个字符开始的str传入函数,继续递归调用
return 1 + my_strlen2(str + 1);
}
}
// 方法3:指针的方式
size_t my_strlen3(const char *str)
{
// 指针p指向字符串的起始位置
const char *p = str;
while (*p != '\0')
{
p++;
}
// 指针str到p的距离即字符串的长度
return p - str;
}
// 测试函数,将函数指针作为参数传入
// 参数:函数指针,字符串
// 赋值:func=strlen;
void test(strlenPtr func, const char *str)
{
// 函数调用
printf("strlen = %llu\n", func(str));
}
// 测试函数指针的用法
void test2()
{
char arr[] = "hello world";
size_t (*func)(const char *); // 函数指针
func = strlen; // strlen的地址赋值给函数指针func
printf("strlen = %llu\n", func(arr));
}
// 测试自定义类型的函数指针的用法
void test3()
{
char arr[] = "hello world";
strlenPtr func = strlen;
printf("strlen = %llu\n", func(arr));
}
int main()
{
char arr[] = "hello world";
char *str = "hello world";
// 测试:库函数实现
printf("测试:库函数实现\n");
test(strlen, arr);
test(strlen, str);
// 测试:计数器方式
printf("测试:计数器方式\n");
test(my_strlen1, arr);
test(my_strlen1, str);
// 测试:递归方式
printf("测试:递归方式\n");
test(my_strlen2, arr);
test(my_strlen2, str);
// 测试:指针方式
printf("测试:指针方式\n");
test(my_strlen3, arr);
test(my_strlen3, str);
test2();
test3();
return 0;
}
程序运行测试:


浙公网安备 33010602011771号