2009-12-31 148 views
4

我对语言环境特定的转换不是很熟悉,所以我可能会在此处使用错误的术语。这是我想要发生的事情。更改字符串语言环境

我想编写一个函数

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

这样,如果我调用该函数如下:

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

输出字符串将是 “1,01”

感谢你的帮助!

+0

没有“字符串区域设置”这样的东西。语言环境是一组反映用户语言和文化的格式规则和其他参数。一个字符串是一系列字符。从其他数据中创建字符串时,可以使用区域设置。一旦创建,就没有与之关联的区域设置。 – 2016-10-06 12:37:56

回答

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输出(至少它在G ++)。您可能不得不摆弄语言环境规范,因为它非常特定于平台。

+2

+1用于提及语言环境的平台特定性质。 – 2009-12-31 17:45:30

+0

谢谢杰夫,这对VS2008的数字值技巧。我不得不像你说的那样摆弄语言环境规范;我唯一可以工作的是 std :: locale(“french_france”) 无论如何,这个解决方案只适用于数值数据。如果我的输入字符串是“我的体重是200.5磅”而我希望输出是“我的体重是200.5磅”?这可能吗? – Praetorian 2009-12-31 18:10:43

+0

那么,200.5是一个数字吧?或者我误解了你的问题? – 2009-12-31 18:22:26