为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C++
拉风的咖菲猫 2019-12-27 12:37:05
如何使用C ++格式化输出?换句话说,C ++的等效用法是printf这样的:printf("%05d", zipCode);我知道我只能printf在C ++中使用,但是我更喜欢output运算符<<。您会使用以下内容吗?std::cout << "ZIP code: " << sprintf("%05d", zipCode) << std::endl;
查看完整描述

3 回答

?
江户川乱折腾

TA贡献1851条经验 获得超5个赞

至少对于问题中提到的非负数(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)本人(“所有邮政编码都不为负”)是我的假设,但我认为是一个相对安全的假设:-)


查看完整回答
反对 回复 2019-12-27
?
慕桂英3389331

TA贡献2036条经验 获得超8个赞

使用setw和setfill调用:


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


查看完整回答
反对 回复 2019-12-27
?
九州编程

TA贡献1785条经验 获得超4个赞

要么,


char t[32];

sprintf_s(t, "%05d", 1);

将输出00001,因为OP已经想要做


查看完整回答
反对 回复 2019-12-27
  • 3 回答
  • 0 关注
  • 563 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信