057. 实现字符串的比较函数

在C语言中,字符串比较是一个常见的操作。标准库函数 strcmp 可以实现字符串的比较,但它按照字典序比较两个字符串,并返回一个整数值来表示比较结果。如果需要实现自定义的字符串比较函数,可以参考 strcmp 的行为,或者根据特定需求进行调整。

C语言实现字符串比较函数

#include <stdio.h>

// 自定义字符串比较函数
int customStrcmp(const char* str1, const char* str2) {
    if (str1 == NULL || str2 == NULL) {
        printf("输入的指针为空!\n");
        return -1; // 返回一个错误标志
    }

    // 遍历两个字符串,逐个比较字符
    while (*str1 != '\0' && *str2 != '\0') {
        if (*str1 != *str2) {
            return *str1 - *str2; // 返回字符的差值
        }
        str1++;
        str2++;
    }

    // 如果所有字符都相等,返回0
    if (*str1 == '\0' && *str2 == '\0') {
        return 0;
    }

    // 如果一个字符串已经结束,另一个字符串还有剩余字符
    if (*str1 == '\0') {
        return -1; // str1 小于 str2
    } else {
        return 1; // str1 大于 str2
    }
}

int main() {
    char str1[] = "apple";
    char str2[] = "app";
    char str3[] = "banana";

    printf("比较 '%s' 和 '%s': %d\n", str1, str2, customStrcmp(str1, str2));
    printf("比较 '%s' 和 '%s': %d\n", str1, str3, customStrcmp(str1, str3));
    printf("比较 '%s' 和 '%s': %d\n", str2, str3, customStrcmp(str2, str3));

    return 0;
}

代码说明

函数定义

  • customStrcmp 接收两个参数:str1str2,它们是需要比较的两个字符串。

  • 检查输入指针是否为空,避免空指针解引用导致的错误。

比较过程

  • 使用 while 循环逐个比较两个字符串的字符,直到遇到字符串结束符 '\0'

  • 如果发现不相等的字符,返回这两个字符的差值(*str1 - *str2)。

  • 如果所有字符都相等,但一个字符串已经结束,另一个字符串还有剩余字符,则根据剩余字符的情况返回 -11

返回值

  • 如果 str1str2 相等,返回 0

  • 如果 str1 小于 str2,返回负整数。

  • 如果 str1 大于 str2,返回正整数。

主函数

  • 定义了几个测试字符串。

  • 调用 customStrcmp 函数比较字符串,并打印比较结果。

示例运行

输入:

无输入

输出:

比较 'apple' 和 'app': 1
比较 'apple' 和 'banana': -1
比较 'app' 和 'banana': -1

注意事项

空指针检查:在函数中检查输入指针是否为空,避免空指针解引用导致的程序崩溃。

比较逻辑:按照字典序比较字符串,逐个字符比较,直到找到不相等的字符或遇到字符串结束符。

返回值

  • 返回值遵循 strcmp 的约定,即:

  • 返回 0 表示两个字符串相等。

  • 返回负整数表示第一个字符串小于第二个字符串。

  • 返回正整数表示第一个字符串大于第二个字符串。

使用标准库函数 strcmp

虽然手动实现字符串比较函数有助于理解字符串操作的原理,但在实际开发中,通常推荐使用标准库函数 strcmp,因为它经过了优化,并且更安全。例如:

#include <stdio.h>
#include <string.h> // 包含 strcmp 函数

int main() {
    char str1[] = "apple";
    char str2[] = "app";
    char str3[] = "banana";

    printf("比较 '%s' 和 '%s': %d\n", str1, str2, strcmp(str1, str2));
    printf("比较 '%s' 和 '%s': %d\n", str1, str3, strcmp(str1, str3));
    printf("比较 '%s' 和 '%s': %d\n", str2, str3, strcmp(str2, str3));

    return 0;
}

总结

通过手动实现字符串比较函数,可以更好地理解字符串比较的逻辑。在实际应用中,建议使用标准库函数 strcmp,但了解其内部实现原理有助于更好地使用它。

视频讲解

BiliBili: 视睿网络-哔哩哔哩视频 (bilibili.com)