You may also want to use the C++ locale support for this. You gain genericity.
#include <functional>
#include <locale>
std::string a = "ABC";
std::transform(a.begin(), a.end(), a.begin(),
std::bind2nd(std::ptr_fun(&std::tolower<char>), std::locale("")));
If you have a range of writable characters, you can also do
std::use_facet< std::ctype<char> >(std::locale("")).tolower(&a[0], &a[0] + a.size());
locale("")
will construct a locale object representing your preferred locale.
I recommend reading Stroustrup's Appendix D: Locales, which is freely available, and is a great insight into locales in C++.