這就是我會爲std::string
#include <algorithm>
#include <iostream>
#include <locale>
#include <string>
struct SortNoCase // functor used to sort strings ignoring the case
{
bool operator()(const std::string& lhs, const std::string& rhs) const
{
std::string lhs_lower, rhs_lower;
std::transform(std::begin(lhs), std::end(lhs),
std::back_inserter(lhs_lower), ::tolower);
std::transform(std::begin(rhs), std::end(rhs),
std::back_inserter(rhs_lower), ::tolower);
return lhs_lower < rhs_lower;
}
};
int main()
{
std::vector<std::string> vs{"Some", "strings", "THAT", "are", "UnSorted"};
std::sort(std::begin(vs), std::end(vs), SortNoCase());
for(auto&& elem: vs)
std::cout << elem << " ";
std::cout << std::endl;
}
PS做到這一點,通過使用自定義排序斷言:還有更復雜的方法,如使用自定義字符特徵,但這它和它的容易明白。如果你真的古董,可以在這裏看看:?如何的std :: string轉換爲小寫]
https://stackoverflow.com/a/5319855/3093378
的可能重複(http://stackoverflow.com/questions/313970/how-to-convert-stdstring-to-lower-case) – bialpio 2014-11-21 23:22:52
我不確定如何在同一步驟中完成它,但可以調用[tolower](http://www.cprogramming.com/ fod/tolower.html),然後將其放入數組中以確保它是小寫字母。 – 2014-11-21 23:23:39
我會改變'std :: sort'中的排序順序,通過自定義的'SortPredicate'來比較忽略大小寫的字符串。 – vsoftco 2014-11-21 23:25:49