Boost.Locale提供了不同的选项来对两个字符串进行不区分大小写的比较。
boost::locale::collator
通过facet使用排序规则:
int stricmp_using_collation(const std::string& lhs,
const std::string& rhs,
const std::locale& loc = std::locale())
{
// secondary level ignores character case but considers accents.
return std::use_facet<boost::locale::collator<char>>(loc)
.compare(boost::locale::collator_base::secondary, lhs, rhs);
}
或通过boost::locale::fold_case
函数使用大小写折叠:
int stricmp_using_case_folding(const std::string& lhs,
const std::string& rhs,
const std::locale& loc = std::locale())
{
return boost::locale::fold_case(lhs, loc)
.compare(boost::locale::fold_case(rhs, loc));
}
可以存储两个函数的中间结果,因此如果选择这样做,两者都可以优化。
根据文档,据我所知,案例折叠通常是与语言环境无关的操作,而排序规则是高度依赖语言环境的操作。
- 案例折叠方法有时会给出不正确的结果吗?
(让我害怕的是“一般”这个词。) - 有没有时候一个人比另一个人更受欢迎?