可能重复:
Case insensitive string comparison in C++
C++ count and map
如何在不使用tolower
的情况下在C ++中执行不区分大小写的计数。我想计算单词而不考虑他们的情况,但不想使用tolower
。 C ++中的任何其他解决方案?
答案 0 :(得分:2)
如果您不想使用tolower
,则总是toupper
,它也可以正常使用。
您不必以小写字母存储字符串,您可以比较小写。
或者,如果可用,您可以使用strcasecmp或stricmp。
或者您可以使用someone else's solution。
答案 1 :(得分:1)
您可以将std :: map用作不区分大小写的自定义比较器函数对象
struct StrCaseInsensitive
{
bool operator() (const string& left , const string& right )
{
return _stricmp( left.c_str() , right.c_str() ) < 0;
}
};
int main(void)
{
char* input[] = { "Foo" , "bar" , "Bar" , "FOO" };
std::map<string, int , StrCaseInsensitive> CountMap;
for( int i = 0 ; i < 4; ++i )
{
CountMap[ input[i] ] += 1;
}
return 0;
}