Я хочу, чтобы одна функция «понизить» (из слова) правильно работала на двух языках, например, английском и русском. Что я должен делать? Должен ли я использовать std :: wstring для этого, или я могу пойти вместе с std :: string?
Также я хочу, чтобы он был кроссплатформенным и не изобретал велосипед.
Каноническая библиотека для таких вещей — ICU:
Также есть бустер-обертка:
http://www.boost.org/doc/libs/1_55_0/libs/locale/doc/html/index.html
Смотрите также этот вопрос:
Существует ли оболочка C ++, подходящая для STL и UTF-8, для ICU или другая мощная библиотека Unicode?
Сначала убедитесь, что вы понимаете концепцию локалей и что вы хорошо понимаете, что такое Unicode и более общие системы кодирования.
Некоторые хорошие чтения для быстрого старта:
Я думаю, что это решение в порядке. Я не уверен, что это подходит для любой ситуации, но это вполне возможно.
#include <locale>
#include <codecvt>
#include <string>
std::string toLowerCase (const std::string& word) {
std::wstring_convert<std::codecvt_utf8<wchar_t> > conv;
std::locale loc("en_US.UTF-8");
std::wstring wword = conv.from_bytes(word);
for (int i = 0; i < wword.length(); ++i) {
wword[i] = std::tolower(word[i], loc);
}
return conv.to_bytes(wword);
}