2009-12-31 3 views
4

Я не очень хорошо знаком с языковыми преобразованиями, поэтому я могу использовать здесь неправильную терминологию. Это то, что я хочу.Изменить строку locale

Я хочу написать функцию

std::string changeLocale(const std::string& str, const std::locale& loc) 

, что если я называю эту функцию следующим образом:

changeLocale(std::string("1.01"), std::locale("french_france")) 

выходная строка будет "1,01"

Спасибо за ваша помощь!

+0

Нет такой вещи, как «языковой стандарт». Языковой стандарт представляет собой набор правил форматирования и других параметров, которые отражают язык и культуру пользователя. Строка представляет собой последовательность символов. При создании строки из некоторых других данных можно использовать локаль. Как только он создан, с ним не связан языковой стандарт. –

ответ

6

Нечто подобное должно сделать трюк

#include <iostream> 
#include <sstream> 
#include <locale> 
int main (int argc,char** argv) { 
    std::stringstream ss; 
    ss.imbue(std::locale("fr_FR.UTF8")); 
    double value = 1.01; 
    ss << value; 
    std::cout << ss.str() << std::endl; 
    return 0; 
}    

должен дать вам выход 1,01 (по крайней мере, это делает на г ++). Возможно, вам придется возиться со спецификацией локали, поскольку она очень специфична для платформы.

+2

+1 для обозначения специфики платформы для конкретной местности. –

+0

Спасибо Джеффу, что делает трюк для числовых значений на VS2008. Мне приходилось возиться с спецификацией локали, как вы сказали; единственное, что я мог получить, это std :: locale («french_france») В любом случае, это решение работает только для числовых данных. Что, если моя строка ввода «Я вешу 200,5 фунта», и я хотел, чтобы результат был «Я весил 200,5 фунтов»? Это вообще возможно? – Praetorian

+0

Ну, 200.5 слишком верно? Или я не понимаю ваш вопрос? –

Смежные вопросы