c++ - 使用C++输出运算符打印前导零?

标签 c++ formatting numbers

如何使用C++格式化输出?换句话说,C++等价于printf的用法是什么:

printf("%05d", zipCode);

我知道我可以在C++中使用printf,但是我更喜欢输出运算符<<

您会使用以下内容吗?
std::cout << "ZIP code: " << sprintf("%05d", zipCode) << std::endl;

最佳答案

至少对于非负数(a),例如问题中提到的邮政编码(b),这将达到目的。

#include <iostream>
#include <iomanip>

using namespace std;
cout << setw(5) << setfill('0') << zipCode << endl;

// or use this if you don't like 'using namespace std;'
std::cout << std::setw(5) << std::setfill('0') << zipCode << std::endl;

控制填充的最常见的IO操作器是:
  • std::setw(width)设置字段的宽度。
  • std::setfill(fillchar)设置填充字符。
  • std::setiosflags(align)设置对齐方式,其中align是ios::left或ios::right。

  • 就您偏爱使用<<而言,我强烈建议您研究fmt库。这是对我们用于格式化内容的工具包的重要补充,并且比大量长度的流管道要好得多,它允许您执行以下操作:
    cout << fmt::format("{:05d}", zipCode);
    

    LEWG当前也将其面向C++ 20,这意味着它有望在那时成为该语言的基础部分(或者几乎可以肯定的是,如果它不十分流行的话)。

    (a)如果确实需要处理负数,则可以按以下方式使用std::internal:
    cout << internal << setw(5) << setfill('0') << zipCode << endl;
    

    这会将填充字符放置在符号和幅度之间。

    (b)此(“所有邮政编码都是非负数”)是我的假设,但我认为是相当安全的假设:-)

    关于c++ - 使用C++输出运算符打印前导零?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64038270/

    相关文章:

    c++ - OOPS 设计模式,以避免对大小变化的二进制依赖

    javascript - 无法删除数字上的逗号(JS、HTML)

    ios - NSPredicate 忽略字符串中的数字 [拼音]

    c++ - OpenCV 3.2.0 iOS 类型转换 : int to __CLPK_integer *

    c++ - 如何 typedef 一个由其他元组串联而成的元组?

    c - 使用用户输入填充结构并通过指针访问

    php - 范围内均匀分布的整数

    c# - 如何在 EpPlus 中更改十进制数的格式?

    c++ - g++ -Wall 不警告 double-> int cast

    java - 如何在 Eclipse 中配置代码格式化程序以在枚举中的每个元素之后添加新行?