C语言中的字符串操作函数自定义实现:标准版与限定长度版

发布时间:2024年01月18日

???????

目录

1. 标准字符串操作函数自定义实现

(a) 自定义strcpy函数

(b) 自定义strcat函数

(c) 自定义strcmp函数

2. 限定长度字符串操作函数自定义实现

(a) 自定义strncpy函数

(b) 自定义strncat函数

(c) 自定义strncmp函数


?对字符串的操作是不可或缺的一部分。标准库提供了如strcpy、strcat、strcmp等基础字符串处理函数,以及它们的“限定长度”版本strncpy、strncat和strncmp。为了深入理解这些函数的工作原理,我们首先将分别展示其标准版自定义实现,然后探讨它们的限定长度版本。

1. 标准字符串操作函数自定义实现


(a) 自定义strcpy函数

char* my_strcpy(char *dest, const char *src) {
    assert(dest != NULL);
    assert(src != NULL);
    char* set = dest;
    while (*dest++ = *src++)
        ;
    return set;
}

my_strcpy函数负责完整地将源字符串src复制到目标字符串dest中,并确保包含结束符\0


(b) 自定义strcat函数

void my_strcat(char *dest, const char *src) {
    char* set = dest;
    while (*dest != '\0') {
        dest++;
    }
    while ((*dest++ = *src++) != '\0')
        ;
    return set;
}

my_strcat函数将源字符串src追加到目标字符串dest的末尾,同样确保结果字符串以\0结束。


(c) 自定义strcmp函数

int my_strcmp(char* dest, char* src) {
    while (*dest == *src) {
        if (*dest == '\0') {
            return 0;
        }
        dest++;
        src++;
    }
    return (*dest > *src) - (*dest < *src);
}

my_strcmp用于比较两个字符串的内容,根据字典顺序返回整数值:相等则为0,dest大于src时为正数,反之为负数。


2. 限定长度字符串操作函数自定义实现


(a) 自定义strncpy函数

void my_strncpy(char *dest, char* src, int count) {
    assert(*dest && *src);
    char* set = dest;
    while (count-- && (*dest++ = *src++))
        ;
    if (count >= 0) {
        *dest = '\0';
    }
    return dest;
}

my_strncpy函数仅复制源字符串src最多count个字符到目标字符串dest中,如果src的字符数量小于count,则剩余空间填充'\0'。


(b) 自定义strncat函数

void my_strncat(char* dest, char* src, int count) {
    assert(*dest && *src);
    char* set = dest;
    while (*dest != '\0') {
        dest++;
    }
    while (count-- && (*dest++ = *src++))
        ;
    if (count >= 0) {
        *dest = '\0';
    }
    return set;
}

my_strncat函数将源字符串src最多count个字符追加到目标字符串dest末尾,并确保结果字符串以'\0'结束。


(c) 自定义strncmp函数

int my_strncmp(const char* dest, const char* src, int count) {
    assert(dest && src);
    int i = 0;
    while (i < count && *dest == *src && *dest != '\0') {
        i++;
        dest++;
        src++;
    }

    if (i == count || *dest == '\0' || *src == '\0') {
        return 0;
    }
    else {
        return *dest - *src;
    }
}

my_strncmp函数比较两个字符串的前count个字符,当达到指定字符数或遇到任一字符串的结束符时停止比较,并返回相应的字符差值。

????????在主函数(main)中,通过实际调用这些自定义函数并对比C标准库函数,我们可以验证它们的功能正确性,并进一步掌握字符串操作函数的底层逻辑。

文章来源:https://blog.csdn.net/2302_78381559/article/details/135682117
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。