📜  编写自己的忽略大小写的strcmp(1)

📅  最后修改于: 2023-12-03 15:41:19.456000             🧑  作者: Mango

编写自己的忽略大小写的strcmp

strcmp是一个常用的C语言字符串比较函数,它可以比较两个字符串的大小。但是strcmp函数是区分大小写的,如果要忽略大小写,我们可以自己编写一个忽略大小写的strcmp函数。

下面是一个示例忽略大小写的strcmp函数:

#include <ctype.h>

int stricmp(const char* lhs, const char* rhs) {
    while (*lhs && *rhs) {
        int diff = tolower(*lhs) - tolower(*rhs);
        if (diff != 0) {
            return diff;
        }
        ++lhs;
        ++rhs;
    }
    return *lhs - *rhs;
}

这个函数使用了C语言标准库中的tolower函数,可以将一个字符转换成小写字符。当比较两个字符串时,我们依次比较它们的每个字符,如果字符不相等,我们按小写字符比较它们,如果小写字符相等,我们继续比较下一个字符,如果小写字符不相等,我们就返回它们的差值。

这个忽略大小写的strcmp函数可以像普通的strcmp函数一样使用,例如:

if (stricmp(str1, str2) == 0) {
    // do something
}

上述代码将会忽略大小写比较str1和str2两个字符串。

尽管这个忽略大小写的strcmp函数已经完全满足我们的需求,但更加健壮的实现应该使用更多的库函数,例如:

#include <ctype.h>
#include <string.h>

int stricmp(const char* lhs, const char* rhs) {
    const size_t len1 = strlen(lhs);
    const size_t len2 = strlen(rhs);
    const size_t minlen = len1 < len2 ? len1 : len2;
    for (size_t i = 0; i < minlen; ++i) {
        const int diff = tolower(lhs[i]) - tolower(rhs[i]);
        if (diff != 0) {
            return diff;
        }
    }
    return len1 - len2;
}

这个函数使用了strlen函数获取字符串长度,实现更加健壮、安全。