Loading

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;
}

程序运行测试:

posted @ 2025-03-11 17:27  景的博客  阅读(16)  评论(0)    收藏  举报