cmp
int cmp_nocase(const std::string& s, const std::string& s2) { std::string::const_iterator p = s.begin(); std::string::const_iterator p2 = s2.begin(); while (p != s.end() && p2 != s2.end()) { if (toupper(*p) != toupper(*p2)) { return (toupper(*p) < toupper(*p2)) ? -1 : 1; } ++p; ++p2; } return (s2.size()==s.size()) ? 0 : (s.size() < s2.size()) ? -1 : 1; } //From book: The C++ Programming Language See also find_replace int cmp_nocase(const std::wstring& s, const std::wstring& s2) { std::wstring::const_iterator p = s.begin(); std::wstring::const_iterator p2 = s2.begin(); while (p != s.end() && p2 != s2.end()) { if (toupper(*p) != toupper(*p2)) { return (toupper(*p) < toupper(*p2)) ? -1 : 1; } ++p; ++p2; } return (s2.size()==s.size()) ? 0 : (s.size() < s2.size()) ? -1 : 1; } template<class CharType> int cmp_nocase(const std::basic_string<CharType>& s, const std::basic_string<CharType>& s2) { std::basic_string<CharType>::const_iterator p = s.begin(); std::basic_string<CharType>::const_iterator p2 = s2.begin(); while (p != s.end() && p2 != s2.end()) { if (toupper(*p) != toupper(*p2)) { return (toupper(*p) < toupper(*p2)) ? -1 : 1; } ++p; ++p2; } return (s2.size()==s.size()) ? 0 : (s.size() < s2.size()) ? -1 : 1; }