📅  最后修改于: 2023-12-03 15:40:32.171000             🧑  作者: Mango
在编程中,有时需要检查两个字符串是否相同,但需要忽略它们的大小写。本文将介绍几种方法实现这个功能。
strcasecmp 函数用于比较两个字符串,不区分大小写。该函数在头文件 string.h 中声明。
#include <string.h>
int strcasecmp(const char *s1, const char *s2);
参数 s1 和 s2 分别为两个要比较的字符串,函数将它们不区分大小写地比较。如果两个字符串相等,返回0;如果 s1 大于 s2,返回一个正整数;如果 s1 小于 s2,返回一个负整数。
以下是示例代码:
#include <stdio.h>
#include <string.h>
int main() {
char str1[] = "Hello, World!";
char str2[] = "hello, world!";
if (strcasecmp(str1, str2) == 0) {
printf("The strings are equal.\n");
} else {
printf("The strings are not equal.\n");
}
return 0;
}
输出结果为:
The strings are equal.
另一种方法是将两个字符串先转换成小写字母,再比较它们是否相等。可以使用标准库函数 tolower 来实现字符的小写转换。
以下是示例代码:
#include <stdio.h>
#include <ctype.h>
#include <string.h>
void tolower_str(char *str);
int main() {
char str1[] = "Hello, World!";
char str2[] = "hello, world!";
tolower_str(str1);
tolower_str(str2);
if (strcmp(str1, str2) == 0) {
printf("The strings are equal.\n");
} else {
printf("The strings are not equal.\n");
}
return 0;
}
void tolower_str(char *str) {
while (*str != '\0') {
*str = tolower(*str);
str++;
}
}
输出结果与之前相同:
The strings are equal.
如果你不想自己实现比较字符串的忽略大小写方法,可以使用一些第三方库来完成。例如,在 C++ 中,可以使用 Boost 库的 iequal 函数,它与 strcasecmp 函数类似,可以比较两个字符串而忽略大小写。
以下是示例代码:
#include <iostream>
#include <boost/algorithm/string.hpp>
int main() {
std::string str1 = "Hello, World!";
std::string str2 = "hello, world!";
if (boost::iequals(str1, str2)) {
std::cout << "The strings are equal." << std::endl;
} else {
std::cout << "The strings are not equal." << std::endl;
}
return 0;
}
输出结果与之前相同:
The strings are equal.
以上介绍了三种不同的方法比较字符串而忽略大小写。您可以根据自己的需要选择最适合的方法。