Case insensitive standard string comparison in C++
本问题已经有最佳答案,请猛点这里访问。
1 2 3 4 5 6 7 8 9 10 | void main() { std::string str1 ="abracadabra"; std::string str2 ="AbRaCaDaBra"; if (!str1.compare(str2)) { cout <<"Compares" } } |
我怎样才能做到这一点?基本上不区分大小写。相关问题我在谷歌上搜索到了这里
http://msdn.microsoft.com/en-us/library/zkcaxw5y.aspx
有一个不区分大小写的方法字符串::compare(str1,str2,bool)。问题是这与我的工作方式有什么关系。
您可以创建一个谓词函数并在
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | 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; } } |
现在您只需执行以下操作:
1 2 3 | if (icompare(str1, str)) { std::cout <<"Compares" << std::endl; } |
将两者都转换为小写,然后进行比较。
转换为下:
1 2 3 4 | for(int i = 0; i < str1.size(); i++) { str[i] = tolower(str[i]); } |
比较字符串:
1 | if (str1.compare(str2) == 0) { ... } |
零值表示两个字符串相等。
编辑
这可用于避免for循环:http://www.cplusplus.com/reference/algorithm/transform/
1 | std::transform(in.begin(),in.end(),std::back_inserter(out),tolower); |