c++ - C++ 中不区分大小写的标准字符串比较

标签 c++ string substr

<分区>

void
main()
{
    std::string str1 = "abracadabra";
    std::string str2 = "AbRaCaDaBra";

    if (!str1.compare(str2)) {
        cout << "Compares"
    }
}

我怎样才能使这项工作?基本上使上述不区分大小写。相关问题 我用 Google 搜索了一下

http://msdn.microsoft.com/en-us/library/zkcaxw5y.aspx

有一个不区分大小写的方法 String::Compare(str1, str2, Bool)。问题是这与我的工作方式有何关系。

最佳答案

您可以创建一个谓词函数并在 std::equals 中使用它来执行比较:

bool icompare_pred(unsigned char a, unsigned char b)
{
    return std::tolower(a) == std::tolower(b);
}

bool icompare(std::string const& a, std::string const& b)
{
    if (a.length()==b.length()) {
        return std::equal(b.begin(), b.end(),
                           a.begin(), icompare_pred);
    }
    else {
        return false;
    }
}

现在你可以简单地做:

if (icompare(str1, str)) {
    std::cout << "Compares" << std::endl;
}

关于c++ - C++ 中不区分大小写的标准字符串比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23943728/

相关文章:

c++ - 来自模板类的友元函数

c++ - 迭代,找到

c++ - 删除未使用的包括

c++ - 带有 const char* 的奇怪 std::cout 行为

c# - 在 C# 中检查字符串是否有大写字母的最快方法是什么?

C++ 风格和 0 到 size_t(0) 的转换

c++ - 为什么 find-utils 中的 find 程序上的 execl(...) 不会输出任何内容?

C:将 uint8 数组转换为包含其字节的十六进制表示形式的字符串

javascript - 从字符串的一部分中删除文本

mysql 列子字符串 ()