C++ c++;C+中不区分大小写的计数+;

C++ c++;C+中不区分大小写的计数+;,c++,case-insensitive,C++,Case Insensitive,可能重复: 如何在C++中不使用 ToWoW进行不区分大小写的计数。我想计算不分大小写的单词,但不想使用tolower。C++中的任何其他解决方案?< p>可以使用AS STD::具有不区分大小写的自定义比较器函数对象的映射< /P> struct StrCaseInsensitive { bool operator() (const string& left , const string& right ) { return _stricmp(

可能重复:


<>如何在C++中不使用<代码> ToWoW进行不区分大小写的计数。我想计算不分大小写的单词,但不想使用
tolower
。C++中的任何其他解决方案?

< p>可以使用AS STD::具有不区分大小写的自定义比较器函数对象的映射< /P>
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;
}
struct StrCaseInsensitive
{
布尔运算符()(常量字符串和左、常量字符串和右)
{
返回_stricmp(left.c_str(),right.c_str())<0;
}
};
内部主(空)
{
字符*输入[]={“Foo”,“bar”,“bar”,“Foo”};
std::map CountMap;
对于(int i=0;i<4;++i)
{
CountMap[输入[i]+=1;
}
返回0;
}

如果您不想使用
来降低
,那么总会有
toupper
,它同样有效

您不必以小写形式存储字符串,只需以小写形式进行比较即可

或者你可以使用,或者如果可以的话


或者你可以使用

如果不使用
tolower
,则可能需要自己实现一些等效函数。为什么要这样限制?你不是刚问过吗?!“也许会有帮助。我想问题是关于实现你提到的比较器函数……我在用一个例子编辑这篇文章,为什么不第一次编写这个函数呢?”?