sách gpt4 ai đã đi

c++ - 不区分大小写的 std::string.find()

In lại 作者:行者123 更新时间:2023-12-04 17:05:52 28 4
mua khóa gpt4 Nike

Tôi đang sử dụng std::stringcủa find()测试一个字符串是否是另一个字符串的子字符串的方法。现在我需要同样东西的不区分大小写的版本。对于字符串比较,我总是可以求助于 stricmp()但似乎没有 stristr() .

我找到了各种答案,大多数建议使用 Boost在我的情况下,这不是一个选择。另外,我需要支持 std::wstring/wchar_t .有任何想法吗?

1 Câu trả lời

Bạn có thể sử dụng std::search 带有自定义谓词。

#include 
#include
#include
sử dụng không gian tên std;

// templated version of my_equal so it could work with both char and wchar_t
template
struct my_equal {
my_equal( const std::locale& loc ) : loc_(loc) {}
bool operator()(charT ch1, charT ch2) {
return std::toupper(ch1, loc_) == std::toupper(ch2, loc_);
}
riêng tư:
const std::locale& loc_;
};

// find substring (case insensitive)
template
int ci_find_substr( const T& str1, const T& str2, const std::locale& loc = std::locale() )
{
typename T::const_iterator it = std::search( str1.begin(), str1.end(),
str2.begin(), str2.end(), my_equal(loc) );
if ( it != str1.end() ) return it - str1.begin();
else return -1; // not found
}

int main(int arc, char *argv[])
{
// string test
std::string str1 = "FIRST HELLO";
std::string str2 = "hello";
int f1 = ci_find_substr( str1, str2 );

// wstring test
std::wstring wstr1 = L"ОПЯТЬ ПРИВЕТ";
std::wstring wstr2 = L"привет";
int f2 = ci_find_substr( wstr1, wstr2 );

trả về 0;
}

关于c++ - 不区分大小写的 std::string.find(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61107668/

28 4 0
Bài viết được đề xuất: php - 命名空间无法正确解析
Bài viết được đề xuất: ASP.NET 部署
Bài viết được đề xuất: Java 6 支持的 Unicode 版本
Bài viết được đề xuất: python - Django 在错误的应用程序中搜索 URL
行者123
Hồ sơ cá nhân

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá Didi Taxi miễn phí
Mã giảm giá Didi Taxi
Giấy chứng nhận ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com