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

c++ case insensitive count in C++

本问题已经有最佳答案,请猛点这里访问。

Possible Duplicate:
Case insensitive string comparison in C++
C++ count and map

如何在不使用EDCOX1×0的情况下,在C++中执行大小写不敏感计数。我想数单词,不管他们的情况如何,但不想使用tolower。C++中的其他解决方案吗?


如果您不想使用tolower,那么总是有toupper,它也可以工作。

您不必将字符串存储为小写,只需比较小写即可。

或者您可以使用strcasecmp或stricmp(如果有)。

或者你可以使用别人的解决方案。


可以使用AS STD::具有不区分大小写的自定义比较器函数对象的MAP

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
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;
}