C++ string find 忽略大小写
时间: 2024-03-18 12:04:34 浏览: 20
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()`来实现。