tolower
#include <locale> #include <iostream> #include <string> int main() { std::locale loc("ja_JP.UTF-8"); const std::ctype<char>& cty = std::use_facet<std::ctype<char> >(loc); std::string str = "HELLO WORLD."; std::cout << str << std::endl; for (std::string::iterator itor = str.begin(); itor != str.end(); ++itor) *itor = cty.tolower(*itor); std::cout << str << std::endl; const std::ctype<wchar_t>& wcty = std::use_facet<std::ctype<wchar_t> >(loc); std::wstring wstr = L"HELLO WORLD."; std::wcout << wstr << std::endl; for (std::wstring::iterator itor = wstr.begin(); itor != wstr.end(); ++itor) *itor = wcty.tolower(*itor); std::wcout << wstr << std::endl; return 0; }
C++的にはlocaleオブジェクトからctypeファセットを取り出してそれを使ってtolower、と言うのが正しいやり方じゃないかと。
メドいですが。
あとUnicode系文字コードだと結局Unicodeの等価性 - WikipediaとかもあるのでUTF-16とかUTF-32とかに揃えた上でICU - International Components for Unicodeとかに丸投げしちゃうんだろうしなぁ・・・