Day28~实现strlen、strcpy、strncpy、strcat、strncat

实现strlen、strcpy、strncpy、strcat、strncat

cpp 复制代码
#include <stdio.h>

size_t my_strlen(const char *src)
{
    size_t len = 0;

    while (*src != '\0')
    {
        len++;
        src++;
    }
    return len;
}

char *my_strcpy(char *dest, const char *src)
{
    if (dest == NULL || src == NULL) // 判断输入的字符是否为空
    {
        return NULL; // 如果为空,就返回空
    }

    char *temp = dest; // 将dest的地址赋值给一个临时变量

    while (*src != '\0') // 遍历要拷贝的字符
    {
        *temp = *src; // 将src的值赋给temp
        src++;        // src地址后移
        temp++;       // temp地址后移
    }

    *temp = '\0'; // 最后一位为\0
 
    return dest; // 返回dest
}

char *my_strncpy(char *dest, const char *src, size_t n)
{
    if (dest == NULL || src == NULL)
    {
        return NULL;
    }

    char *temp = dest;

    size_t i;

    for (i = 0; (i < n) && (*src != '\0'); i++)
    {
        *temp = *src;
        src++;
        temp++;
    }

    for (; i < n; i++)
    {
        *temp = '\0';
    }

    return dest;
}

char *my_strcat(char *dest, const char *src)
{
    if (dest == NULL || src == NULL)
    {
        return NULL;
    }

    char *temp = dest;

    while (*temp != '\0')
    {
        temp++;
    }

    while (*src != '\0')
    {
        *temp = *src;
        temp++;
        src++;
    }

    *temp = '\0';

    return dest;
}

char *my_strncat(char *dest, const char *src, size_t n)
{
    if (dest == NULL || src == NULL)
    {
        return NULL;
    }

    char *temp = dest;

    while (*temp != '\0')
    {
        temp++;
    }

    size_t i;

    for (i = 0; (i < n) && (*src != '\0'); i++)
    {
        *temp = *src;
        src++;
        temp++;
    }

    for (; i < n; i++)
    {
        *temp = '\0';
    }

    return dest;
}

int main()
{
    char dest[100] = "Hello World";
    char src[100] = "Hello World";

    // char *result1 = my_strcpy(dest, src);
    // char *result2 = my_strncpy(dest, src, 3);
    // size_t result = my_strlen(src);
    // char *result3 = my_strcat(dest, src);
    char *result4 = my_strncat(dest, src, 3);

    // printf("%s\n", result1);
    // printf("%s\n", result2);
    // printf("%ld\n", result);
    // printf("%s\n", result3);
    printf("%s\n", result4);

    return 0;
}
相关推荐
txzrxz8 分钟前
动态规划——背包问题
算法·动态规划
Yingye Zhu(HPXXZYY)12 分钟前
洛谷 P15553 [CCPC 2025 哈尔滨站] 液压机
算法
谭欣辰39 分钟前
LCS(最长公共子序列)详解
开发语言·c++·算法
m0_6294947344 分钟前
LeetCode 热题 100-----17.缺失的第一个正数
数据结构·算法·leetcode
Cando学算法44 分钟前
鸽笼原理(抽屉原理)
c++·算法·学习方法
Tisfy1 小时前
LeetCode 0796.旋转字符串:暴力模拟
算法·leetcode·题解·模拟·字符串匹配
BlockChain8881 小时前
AI+区块链深度探索:算法与账本的共生时代
人工智能·算法·区块链
生成论实验室1 小时前
《源·觉·知·行·事·物:生成论视域下的统一认知语法》第一章 源:不可言说的生成之源
人工智能·科技·算法·生活·创业创新
2zcode2 小时前
基于低光照增强与轻量型CNN道路实时识别算法研究(UI界面+数据集+训练代码)
人工智能·算法·cnn·低光照增强·自动驾驶技术
郝学胜-神的一滴2 小时前
跨平台动态库与头文件:从原理到命名的深度解析
linux·c++·程序人生·unix·cmake