Here's a solution with no loops. It converts each character in the string to lower case before comparing them, and uses tail recursion to iterate over the string. I'm guessing this is the intention of the problem you've been set, though some would say that tail recursion is a loop as well.
#include <cctype>
#include <string>
bool string_eq_ci(const std::string& x, const std::string& y);
bool string_loop(const std::string& x, const std::string& y, size_t i);
...
if (string_eq_ci(color1, color2)))
cout << "Color names cannot be the same, good bye..." << endl;
...
bool string_eq_ci(const std::string& x, const std::string& y)
{
return x.size() == y.size() && string_loop(x, y, 0);
}
bool string_loop(const std::string& x, const std::string& y, size_t i)
{
return i == x.size() || (
tolower(static_cast<unsigned char>(x[i])) ==
tolower(static_cast<unsigned char>(y[i])) &&
string_loop(x, y, i + 1));
}