c++ - 打印带有千位和百万位分隔符的整数

标签 c++ fstream separator

有一个关于打印带有千位/百万位分隔符的整数的问题。

我有一个文本文件,其中包含国家、城市和总人口。

我必须阅读文件,并按国家排序。如果国家/地区是平等的,我必须按人口降序排序。

文本文件是这样的:

澳大利亚........悉尼.......10.123.456

巴西.............圣保罗.......7.123.345

我将所有 3 个读入一个单独的字符串。然后我删除所有“。”在人口字符串中。然后我使用 atoi() 将人口字符串转换为整数。

现在,如果国家/地区相等,我可以按人口排序。这种排序工作正常。

到目前为止一切顺利。但我需要将千/百万分隔符放入人口的打印中。

如果我使用字符串,带有“.”对于人口,排序不能正常工作。 它的排序如下:

x.......x......1.123456

x.......x......10.123.456

x.......x......2.123.232

它必须看起来像:

澳大利亚........悉尼.......10.123.456

澳大利亚........布里斯类.......8.123.456

有没有办法通过再次在 int 中添加分隔符来操纵打印?

非常感谢

最佳答案

imbue()带有 locale 的输出流具有所需的分隔符。例如:

#include <iostream>
#include <locale>

int main()
{
    // imbue the output stream with a locale.
    int i = 45749785;
    std::cout << i << "\n";

    std::cout.imbue(std::locale(""));
    std::cout << i << "\n";
}

我机器上的输出(和 online demo ):

45749785
45,749,785

正如 James Kanze 评论和回答的那样灌输输入流也可以读取分离的 int 值,而无需手动修改输入。


参见 Stroustrop 的 Appendix D: Locales以获得语言环境的详细概述。

关于c++ - 打印带有千位和百万位分隔符的整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17530408/

相关文章:

C++ 相互依赖的类

c++ - 当我将它放在 while 语句之外时,为什么我的 ofstream 不起作用?

C++文件I/O问题

c++ - 二进制文件写入后读取负整数

Pandas 读取以逗号分隔的千位分隔符格式的 CSV 数据

c++ - Boost 文件系统与 c++11 线程不兼容

c++ - 双*数组,与双*指针

java - 从打印语句中删除最后一个分隔符

c++ - 在 visual studio 中使用 calcOpticalFlowPyrLK() 函数

awk - 在awk中用双引号转义分隔符