C++字符串忽略大小写比较
时间: 2023-09-12 17:13:19 浏览: 95
在C++中,可以使用标准库函数`stricmp()`或`stricmp()`来进行字符串的忽略大小写比较。
```cpp
#include <iostream>
#include <cstring>
int main() {
char str1[] = "Hello";
char str2[] = "hello";
if (stricmp(str1, str2) == 0) {
std::cout << "Strings are equal (case insensitive)\n";
} else {
std::cout << "Strings are not equal (case insensitive)\n";
}
return 0;
}
```
输出结果为:
```
Strings are equal (case insensitive)
```
如果使用`stricmp()`,则忽略字符串中字母的大小写,如果相等返回0;否则返回一个非0值。注意,`stricmp()`是非标准函数,建议使用`strcasecmp()`代替。`strcasecmp()`是标准库函数,其用法与`stricmp()`相同。
相关问题
字符串忽略大小写比较 C++写法
可以使用C++ STL库中的`std::tolower`函数将字符串转换为小写形式,然后再比较两个字符串是否相等。以下是一个示例代码:
```c++
#include <iostream>
#include <string>
#include <algorithm> // for std::transform
bool compareIgnoreCase(const std::string& str1, const std::string& str2) {
if (str1.size() != str2.size()) {
return false;
}
std::string str1Lower, str2Lower;
std::transform(str1.begin(), str1.end(), std::back_inserter(str1Lower), ::tolower);
std::transform(str2.begin(), str2.end(), std::back_inserter(str2Lower), ::tolower);
return str1Lower == str2Lower;
}
int main() {
std::string str1 = "Hello, World!";
std::string str2 = "hello, world!";
if (compareIgnoreCase(str1, str2)) {
std::cout << "The two strings are equal (ignoring case)." << std::endl;
} else {
std::cout << "The two strings are not equal (ignoring case)." << std::endl;
}
return 0;
}
```
在上面的代码中,`compareIgnoreCase`函数将两个字符串转换为小写形式,然后进行比较。`std::transform`函数可以将一个字符串中的每个字符转换为另一个字符,这里使用了`::tolower`函数进行转换。最后比较两个转换后的字符串是否相等。
C++ string find 忽略大小写
C++标准库中的`std::string`提供了一个`find()`函数来查找某个子串在原字符串中的位置,但默认情况下`find()`是区分大小写的。如果需要忽略大小写,可以使用C++11引入的`std::search()`结合自定义的比较函数来实现。具体步骤如下:
1. 定义一个自定义的比较函数,该函数接受两个参数,分别为要比较的字符和模式串的字符,返回是否相等。
```c++
bool case_insensitive_equal(char ch1, char ch2) {
return std::tolower(ch1) == std::tolower(ch2);
}
```
2. 调用`std::search()`函数查找子串在原字符串中的位置,第三个参数传入自定义的比较函数。
```c++
#include <iostream>
#include <algorithm>
#include <string>
int main()
{
std::string str = "Hello, World!";
std::string sub_str = "world";
auto it = std::search(str.begin(), str.end(), sub_str.begin(), sub_str.end(), case_insensitive_equal);
if (it != str.end()) {
std::cout << "Found at position " << it - str.begin() << '\n';
} else {
std::cout << "Not found\n";
}
return 0;
}
```
注意:这种方法只适用于ASCII字符集,对于Unicode字符集需要使用`std::wstring`和`std::wsearch()`来实现。