Как сделать так, чтобы дружественная к языкам функция снижалась?

Я хочу, чтобы одна функция «понизить» (из слова) правильно работала на двух языках, например, английском и русском. Что я должен делать? Должен ли я использовать std :: wstring для этого, или я могу пойти вместе с std :: string?
Также я хочу, чтобы он был кроссплатформенным и не изобретал велосипед.

2

Решение

Каноническая библиотека для таких вещей — ICU:

http://site.icu-project.org/

Также есть бустер-обертка:

http://www.boost.org/doc/libs/1_55_0/libs/locale/doc/html/index.html

Смотрите также этот вопрос:
Существует ли оболочка C ++, подходящая для STL и UTF-8, для ICU или другая мощная библиотека Unicode?

Сначала убедитесь, что вы понимаете концепцию локалей и что вы хорошо понимаете, что такое Unicode и более общие системы кодирования.

Некоторые хорошие чтения для быстрого старта:

http://joelonsoftware.com/articles/Unicode.html

http://en.wikipedia.org/wiki/Locale

6

Другие решения

Я думаю, что это решение в порядке. Я не уверен, что это подходит для любой ситуации, но это вполне возможно.

#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);
}
0

По вопросам рекламы [email protected]