C中不区分大小写的字符串比较

新手上路,请多包涵

在 C++ 中进行不区分大小写的字符串比较而不将字符串转换为全部大写或全部小写的最佳方法是什么?

请说明这些方法是否对 Unicode 友好以及它们的可移植性。

原文由 Adam 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.5k
2 个回答

Boost 包括一个方便的算法:

 #include <boost/algorithm/string.hpp>
// Or, for fewer header dependencies:
//#include <boost/algorithm/string/predicate.hpp>

std::string str1 = "hello, world!";
std::string str2 = "HELLO, WORLD!";

if (boost::iequals(str1, str2))
{
    // Strings are identical
}

原文由 Rob 发布,翻译遵循 CC BY-SA 3.0 许可协议

如果您不想使用 Boost 库,那么这里是仅使用 C++ 标准 io 标头的解决方案。

 #include <iostream>

struct iequal
{
    bool operator()(int c1, int c2) const
    {
        // case insensitive comparison of two characters.
        return std::toupper(c1) == std::toupper(c2);
    }
};

bool iequals(const std::string& str1, const std::string& str2)
{
    // use std::equal() to compare range of characters using the functor above.
    return std::equal(str1.begin(), str1.end(), str2.begin(), iequal());
}

int main(void)
{
    std::string str_1 = "HELLO";
    std::string str_2 = "hello";

    if(iequals(str_1,str_2))
    {
        std::cout<<"String are equal"<<std::endl;
    }

    else
    {
        std::cout<<"String are not equal"<<std::endl;
    }

    return 0;
}

原文由 Haseeb Mir 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题