C++11 представил алгоритм сравнения строк без учета регистра?

просто перешел на C++11 на GCC 4.8 и было бы неплохо отойти от boost::iequals в пользу STL. Я поискал в паутине, но не увидел никаких признаков std::iequals или std::basic_string методы для поддержки этого изначально в STL.

Если это не существует в C++11, изменился ли подход к решению этой проблемы с C++03 (т. е. разные обходные пути?), или boost все еще предпочтительнее здесь?

спасибо заранее.`

2 ответов


нет, C++11 не вводил функцию сравнения строк без учета регистра. Вам нужно будет придерживаться Boost на данный момент.

надеюсь, что это помогает!


нет собственного сравнения строк, но с богатым STL вы можете написать свой собственный очень просто что-то вроде этого :

`

bool caseInsensitiveCmp(wstring str1, wstring str2)
    {
        if ( str1.size() != str2.size())
            return false;
        else
        return (str1.empty() | str2.empty()) ? 
                false :
                std::equal(str1.begin(), str1.end(),str2.begin(),
                    [](wchar_t a, wchar_t b)
                    {
                        return tolower(a) == tolower(b);
                    }
                );
    }`

первая проверка-защитить std: equals от сравнения по индифферентной длине.