Case-Insensitive String Comparison in C++

How to do a case-insensitive string comparison? [duplicate]

If you can afford deviating a little from strict C standard, you can make use of strcasecmp().
It is a POSIX API.

Otherwise, you always have the option to convert the strings to a certain case (UPPER or lower) and then perform the normal comparison using strcmp().

Case-insensitive string comparison in C++

Boost includes a handy algorithm for this:

#include <boost/algorithm/string.hpp>
// Or, for fewer header dependencies:
//#include <boost/algorithm/string/predicate.hpp>

std::string str1 = "hello, world!";
std::string str2 = "HELLO, WORLD!";

if (boost::iequals(str1, str2))
// Strings are identical

Case insensitive standard string comparison in C++ [duplicate]

You can create a predicate function and use it in std::equals to perform the comparison:

bool icompare_pred(unsigned char a, unsigned char b)
return std::tolower(a) == std::tolower(b);

bool icompare(std::string const& a, std::string const& b)
if (a.length()==b.length()) {
return std::equal(b.begin(), b.end(),
a.begin(), icompare_pred);
else {
return false;

Now you can simply do:

if (icompare(str1, str)) {
std::cout << "Compares" << std::endl;

How to compare two characters without case sensitivity in C?

You can use low case for both chars, for example by using tolower function:

if (tolower(str1[i])==tolower(str2[j])) printf("Equal");

Also keep in mind: tolower does not work for multibyte char. So for those chars you should use other function

Case insensitive string comparison C++ [duplicate]


The strcasecmp() function performs a byte-by-byte comparison of the strings s1 and s2, ignoring the case of the characters. It returns an integer less than, equal to, or greater than zero if s1 is found, respectively, to be less than, to match, or be greater than s2.

The strncasecmp() function is similar, except that it compares no more than n bytes of s1 and s2...

Related Topics

Leave a reply