gpt4 book ai didi

c++ - std::find 不区分大小写检查

转载 作者:行者123 更新时间:2023-11-30 05:06:08 25 4
gpt4 key购买 nike

bool is_executable_file(std::wstring file) {
std::vector<std::wstring> d = get_splitpath(file);
// d [ 3 ] is extension of file ie .exe
std::vector<std::wstring> ext = { L".exe", L".dll", L".cmd", L".msi" };
if ( std::find(ext.begin() , ext.end() , d [ 3 ]) != ext.end() ) {
return true;
}
// do further checks
return false;
}

在上面我如何让 std::find 进行不区分大小写的检查,这样我就不需要添加所有组合,即 .exe.EXE 是一样的吗?

或者另一种根据扩展名列表检查文件扩展名的方法,忽略扩展名和扩展名列表中的大小写?

最佳答案

您可以使用 std::equalstd::tolower 来检查两个 wstring

#include <iostream>
#include <string>
#include <algorithm>
#include <cwctype>
#include <locale>

int main()
{
std::wstring wstr1 = L"dll", wstr2 = L"DLL";

auto icompare = [](wchar_t const &c1, wchar_t const &c2)
{
return std::tolower(c1, std::locale()) == std::tolower(c2, std::locale());
};

if (std::equal(wstr1.begin(), wstr1.end(), wstr2.begin(), wstr2.end(), icompare))
std::cout << "equal" << std::endl;
else
std::cout << "notEqual" << std::endl;

return 0;
}

例如:https://ideone.com/I3zukI

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com