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

时间:2014-05-29 21:59:35

标签: 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)。问题是这与我的工作方式有何关系。

2 个答案:

答案 0 :(得分:21)

您可以创建谓词函数并在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;
}

答案 1 :(得分:2)

将两者都转换为小写,然后进行比较。

转换为更低版本:

for(int i = 0; i < str1.size(); i++)
{
  str[i] = tolower(str[i]);
}

比较字符串:

if (str1.compare(str2) == 0) { ... }

零值表示两个字符串相等。

修改

这可用于避免循环:http://www.cplusplus.com/reference/algorithm/transform/

std::transform(in.begin(),in.end(),std::back_inserter(out),tolower);