更改字符串区域设置

Pra*_*ian 4 c++ string stl

我对特定于语言环境的转换不太熟悉,所以我可能在这里使用了错误的术语.这就是我想要发生的事情.

我想写一个函数

std::string changeLocale( const std::string& str, const std::locale& loc )
Run Code Online (Sandbox Code Playgroud)

如果我按如下方式调用此函数:

changeLocale( std::string( "1.01" ), std::locale( "french_france" ) )
Run Code Online (Sandbox Code Playgroud)

输出字符串将是"1,01"

谢谢你的帮助!

Jef*_*ter 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;
}             
Run Code Online (Sandbox Code Playgroud)

应该给你输出1,01(至少它在g ++上).您可能不得不摆弄语言环境规范,因为它非常特定于平台.

  • 我想帮助解决这个问题只是为了发现std :: locale在Mac OS X上被大大破坏了:它只接受语言环境名称"C"和"POSIX".这似乎至少在10.4到10.6之间.您仍然可以获取当前区域设置并覆盖各种特征; 但是,您无法加载"fr_FR"之类的预定义语言环境. (3认同)
  • +1表示区域设置的平台特定性质. (2认同)