Boost includes a handy algorithm for this:
#include
// Or, for fewer header dependencies:
//#include
std::string str1 = “hello, world!”;
std::string str2 = “HELLO, WORLD!”;
if (boost::iequals(str1, str2))
{
// Strings are identical
}
Take advantage of the standard char_traits. Recall that a std::string is in fact a typedef for std::basic_string
struct ci_char_traits : public char_traits
static bool eq(char c1, char c2) { return toupper(c1) == toupper(c2); }
static bool ne(char c1, char c2) { return toupper(c1) != toupper(c2); }
static bool lt(char c1, char c2) { return toupper(c1) < toupper(c2); }
static int compare(const char* s1, const char* s2, size_t n) {
while( n-- != 0 ) {
if( toupper(*s1) < toupper(*s2) ) return -1;
if( toupper(*s1) > toupper(*s2) ) return 1;
++s1; ++s2;
}
return 0;
}
static const char* find(const char* s, int n, char a) {
while( n– > 0 && toupper(*s) != toupper(a) ) {
++s;
}
return s;
}
};
typedef std::basic_string
The details are on Guru of The Week number 29.