栏目分类:
子分类:
返回
文库吧用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
文库吧 > IT > 软件开发 > 后端开发 > C/C++/C#

(C语言)模拟实现库函数strlen,strcpy

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

(C语言)模拟实现库函数strlen,strcpy

目录

前言

一、模拟实现 strlen()

 方法一:计数器方法

方法二:递归函数实现 

方法三:指针-指针

二、模拟实现strcpy() 


前言

       int strlen(const char*)是计算字符串长度的函数,返回类型为int,在计算过程中,遇到‘’结束计算返回值;

        char* strcpy(char* destination,const char* source)将字符串source中的字符全部拷贝到数组destination中去;

为了更准确使用这两个库函数,今天我们就来模拟实现,掌握背后的原理;

一、模拟实现 strlen()

引入头文件

#include

 方法一:计数器方法

        在函数内部设定一个计数器count,当满足条件时,count自加,当不满足条件时,返回count的值。

代码如下:        

#include
int my_strlen(const char* str)
{
    int count = 0;//count在此作为一个计数器,统计出现的字符;
    while (*str)//循环条件为 当内容不为结束符‘’时循环
    {
        count++;
        str++;//统计完成后 地址向后加一位;
    }
    return count;//循环结束后 返回计数器count的值
}
int main()
{
    char str[] = "abcdef";
    int len=my_strlen(str);
    printf("%d", len);
    return 0;

 运行结果如下:

方法二:递归函数实现 

代码如下:

#include
int my_strlen(const char* str)
{
    if (*str == '')//当内容为结束符‘'时 返回0
        return 0;
    else
        return 1 + my_strlen(++str);//取本次地址的下一位作为下次函数数调用的参数
}
int main()
{
    char str[] = "abcdef";
    int len=my_strlen(str);
    printf("%d", len);
    return 0;
}

运行结果如下 :

方法三:指针-指针

        指针-指针得到的是两指针之间的元素个数

代码如下: 

#include
int my_strlen(const char* str)
{
    char* tem = str;//设置一个临时指针变量记录此时地址
    while (*tem)//利用指针tem,当内容不为结束符’‘时向后加一,直到退出
    {
        tem++;
    }
    return tem - str;//指针-指针=两地址间元素的个数就为字符数
}
int main()
{
    char str[] = "abcdef";
    int len=my_strlen(str);
    printf("%d", len);
    return 0;
}

运行结果如下:

二、模拟实现strcpy() 

           对于给定数组str1 现要把str1的内容全部拷贝到一个可变数组str2中

代码如下:

#include
char* my_strcpy(char* dest, const char* src)
{
    while (*src)//条件判断是否为结束符’‘
    {
        *dest = *src;//将src的内容赋给dest
        dest++;
        src++;//两个地址自增
    }
}
int main()
{
    char str1[20] = "abcdef";
    char str2[20] = { 0 };
    my_strcpy(str2, str1);
    puts(str2);
    return 0;
}

运行结果如下:

 对上述代码进行优化把条件-赋值-地址自增放在while的条件语句中

优化代码如下:

 

#include
char* my_strcpy(char* dest, const char* src)
{
    while (*dest++ = *src++);
    //由于自加的优先级高于取内容符号,所以先进行自加运算,又因为是后置++,所以先使用地址 同时把右边的scr的内容赋给
    //dest,赋值完毕后,地址向后移一位,如果当dest赋给src的值为结束符时那么此循环结束;

}
int main()
{
    char str1[20] = "abcdef";
    char str2[20] = { 0 };
    my_strcpy(str2, str1);
    puts(str2);
    return 0;
}

运行结果如下:

转载请注明:文章转载自 www.wk8.com.cn
本文地址:https://www.wk8.com.cn/it/1037910.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 wk8.com.cn

ICP备案号:晋ICP备2021003244-6号