Fre*_*son 6 c++ string vector case find
我有
std::vector<std::string> vec;
std::string myString;
Run Code Online (Sandbox Code Playgroud)
我需要找出是否myString是在vec使用不区分大小写 comaprisons.
我知道我可以使用
find(vec.begin(), vec.end(), myString) != vec.end())
Run Code Online (Sandbox Code Playgroud)
回答问题"vec中的myString是什么?" 但这将进行区分大小写的比较.我需要不区分大小写的比较.
这个位置并不重要,我只是想知道myString是否在vec中.
您可以使用std::find_if、内联 lambda 和std::tolower进行比较:
//Computing the lower version of mystring
std::string my_string_lower;
my_string_lower.reserve(mystring.size());
std::transform(mystring.begin(), mystring.end(), std::back_inserter(my_string_lower), ::tolower);
// Checking if it is exist in the vector:
auto is_exist = std::find_if(vec.begin(), vec.end(), [&my_string_lower](std::string item){
//Transform the each vector item to lower temporally
std::transform(item.begin(), item.end(), item.begin(), ::tolower);
return mystring==item;
}) != vec.end();
Run Code Online (Sandbox Code Playgroud)
如果您要在同一字符串向量中搜索多次,最好只计算一次:
//Computing the lower version of the whole vector
std::vector<std::string> vec_lower;
vec_lower.reserve(vec.size());
std::transform(vec.begin(), vec.end(), std::back_inserter(vec_lower),[](std:string item){
std::transform(item.begin(), item.end(), item.begin(), ::tolower);
return item;
});
//Computing the lower version of mystring
std::string my_string_lower;
my_string_lower.reserve(mystring.size());
std::transform(mystring.begin(), mystring.end(), std::back_inserter(my_string_lower), ::tolower);
// Checking if it is exist in the lower version of the vector:
auto is_exist = std::find_if(vec_lower.begin(), vec_lower.end(), [&my_string_lower](const std::string& item){
return mystring==item;
}) != vec_lower.end();
Run Code Online (Sandbox Code Playgroud)