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

如何在 C++ 中格式化我的输出?换句话说,什么是 C++ 等价于使用 printf像这样:

printf("%05d", zipCode);

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

你会用下面的吗?

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库(见 https://github.com/fmtlib/fmt)。这是对我们用于格式化内容的工具包的一个很好的补充,并且比大量长度的流管道要好得多,允许您执行以下操作:

cout << fmt::format("{:05d}", zipCode);

目前 LEWG 也将其作为 C++20 的目标,这意味着它有望成为该语言的基础部分(或者几乎可以肯定以后,如果它不完全潜入的话)。


(a)如果你确实需要处理负数,你可以使用std::internal如下:

cout << internal << setw(5) << setfill('0') << zipCode << endl;

这会将填充字符放在符号和大小之间。


(b) 这(“所有邮政编码都是非负数”)是我的一个假设,但我保证这是一个相当安全的假设:-)

https://stackoverflow.com/questions/530614/

相关文章:

emacs - 在 emacs 中自动格式化源文件

javascript - ".000Z"的 "yyyy-mm-ddT00:00:00.000Z"是什

c# - 一次格式化 Visual Studio 项目中的所有文件

r - 在 ggplot2 中使用 scale_x_date 格式化日期

html - 为什么 HTML 要求多个空格在浏览器中显示为单个空格?

python - 将某些 float 数据框列格式化为 Pandas 中的百分比

intellij-idea - 启用/禁用 IntelliJ 的花哨≠(不等于)运算符

java - 如何使用 Java 漂亮地打印现有的 JSON 数据?

string - 如何 fmt.Printf 带有千位逗号的整数

java - IntelliJ 折叠单行方法