📅  最后修改于: 2023-12-03 15:41:19.456000             🧑  作者: Mango
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函数获取字符串长度,实现更加健壮、安全。