C++ 如何设置cout区域设置以插入逗号作为分隔符?
给定以下代码:C++ 如何设置cout区域设置以插入逗号作为分隔符?,c++,formatting,numbers,number-formatting,C++,Formatting,Numbers,Number Formatting,给定以下代码: cout << 1000; 这可以使用std::locale和cout.imbue()函数来完成,但我担心我可能在这里遗漏了一个步骤。你能认出它吗?我目前正在复制当前区域设置,并添加了一个数千分隔符方面,但逗号从未出现在我的输出中 template<typename T> class ThousandsSeparator : public numpunct<T> { public: ThousandsSeparator(T Separ
cout << 1000;
这可以使用std::locale和cout.imbue()函数来完成,但我担心我可能在这里遗漏了一个步骤。你能认出它吗?我目前正在复制当前区域设置,并添加了一个数千分隔符方面,但逗号从未出现在我的输出中
template<typename T> class ThousandsSeparator : public numpunct<T> {
public:
ThousandsSeparator(T Separator) : m_Separator(Separator) {}
protected:
T do_thousands_sep() const {
return m_Separator;
}
private:
T m_Separator;
}
main() {
cout.imbue(locale(cout.getloc(), new ThousandsSeparator<char>(',')));
cout << 1000;
}
模板类千分位分隔符:public numpunt{
公众:
千位分隔符(T分隔符):m_分隔符(分隔符){}
受保护的:
千禧年九月{
返回m_分离器;
}
私人:
T m_分离器;
}
main(){
cout.imbue(locale(cout.getloc(),new-ThousandsSeparator(','));
cout默认的do\u-sep
实现已经返回了,“
。看起来您应该替代do\u-grouping
。do\u-grouping
默认返回一个空字符串,这意味着没有分组。这意味着每个组有三个数字:
string do_grouping() const
{
return "\03";
}
您是否尝试过编译您希望我们相信您正在使用的确切代码?是否存在memleak的可能副本?“\03”代表什么?ASCII代表“文本结尾”?如果是,原因是什么?@Cory:do\u grouping返回一个字符串,该字符串被视为表示组大小的一个字符数数组。“\03”创建一个字符串,该字符串有一个且只有一个数字值为3的字符,这意味着每个组将有3位数字。默认值不是“,”。C本地不使用分组,否则它是本地特定的。@Martin:我说的是默认返回的形式do_数千_sep,即“,”。它与“默认语言环境”不同。“返回:用作数字组分隔符的字符。所需的专门化返回”“或L”“。”
string do_grouping() const
{
return "\03";
}