我知道对于 C++,如果两个单词都完全小写或完全大写,基本比较运算符就可以完成任务。我有一个字符串数组,字母可以从小到大变化。这是我可以使用的字符串类型的一个小示例:
《丰富的生活CH》
“新生活WMN MNSTRY”
《新生命集会》
我知道Java中有这个函数String.compareToIgnoreCase() http://docs.oracle.com/javase/7/docs/api/java/lang/String.html#compareToIgnoreCase(java.lang.String)。是否有与该函数等效的 C++ 函数?
我不知道标准库中有任何不区分大小写的函数,但您可以为std::equal
:
std::string a("hello");
std::string b("HELLO");
std::cout << std::equal(a.begin(), a.end(), b.begin(),
[] (const char& a, const char& b)
{
return (std::tolower(a) == std::tolower(b));
});
对于考虑区域设置的解决方案,请参阅不区分大小写 std::string.find() https://stackoverflow.com/a/3152296/3920237.
#include <locale>
template<typename charT = std::string::value_type>
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_);
}
private:
const std::locale& loc_;
};
int main()
{
std::string a("hello");
std::string b("HELLO");
std::cout << std::equal(a.begin(), a.end(), b.begin(),
my_equal<>(std::locale()));
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)