如何使用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/