【发布时间】:2011-11-07 15:33:03
【问题描述】:
我想出了这个,因为 stackoverflow 上提供的其他示例是用 C# 编写的
string number_fmt(ulong n)
{
// cout << "(" << n << ")" << endl;
char s[128];
sprintf(s, "%lu", n);
string r(s);
reverse(r.begin(), r.end());
int space_inserted = 0;
size_t how_many_spaces = r.length() / 3;
if(r.length() % 3 != 0)
how_many_spaces += 1;
for(int i = 1; i < how_many_spaces; ++i)
{
r.insert(3 * i + space_inserted, " ");
space_inserted += 1;
}
reverse(r.begin(), r.end());
return r;
}
你知道更好的解决方案吗?
【问题讨论】:
-
这个有什么不好?这将有助于选择更好的。
-
必须是空格吗?您可以尝试使用
<locale>标头功能:cplusplus.com/forum/beginner/24707 -
是的。流已经有一个本地对象,它将为您格式化数字。手动操作不是对称的(通过使用本地,您可以自动获得对称的输入和输出(无需工作))。问题是默认情况下应用程序位于“C”本地。只需将机器默认设置为本地 (""),它就会开始为您的语言环境正确格式化数字。