C ++中的c ++大小写不敏感计数

时间:2011-11-09 07:42:00

标签: c++ case-insensitive

  

可能重复:
  Case insensitive string comparison in C++
  C++ count and map

如何在不使用tolower的情况下在C ++中执行不区分大小写的计数。我想计算单词而不考虑他们的情况,但不想使用tolower。 C ++中的任何其他解决方案?

2 个答案:

答案 0 :(得分:2)

如果您不想使用tolower,则总是toupper,它也可以正常使用。

您不必以小写字母存储字符串,您可以比较小写。

或者,如果可用,您可以使用strcasecmpstricmp

或者您可以使用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;
}