You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++流与fmt::print的填充符使用差异及实现疑问

用fmt库实现自定义字符填充的方法

要在fmt::print里实现和C++流一样的任意字符填充,关键是要在格式字符串里显式指定填充字符+对齐方式+宽度的组合,而不是仅设置宽度。

示例代码

#include <fmt/core.h>

int main() {
    const int y = 730;
    fmt::print("y = {:>5}\n", y);          // 空格填充(默认),右对齐
    fmt::print("y = {:0>5}\n", y);         // 0填充,右对齐
    fmt::print("y = {:X>5}\n", y);         // X填充,右对齐
    fmt::print("y = {:*>5}\n", y);         // *填充,右对齐
}

输出结果

y =   730
y = 00730
y = XX730
y = **730

与C++流的差异说明

  • C++流中setfill是全局设置填充字符,配合setw即可生效,默认右对齐,无需额外指定对齐方式。
  • fmt库的格式化语法遵循[填充字符][对齐方式][宽度]的结构:
    • 若仅写宽度(如{:5}),默认右对齐但仅支持空格填充;
    • 要使用自定义填充字符,必须先写填充字符,再显式指定对齐方式(>右对齐、<左对齐、^居中对齐),最后写宽度,填充字符才会被识别。

比如要左对齐并使用*填充,可写{:*<5},输出结果为730**,和C++流中cout << left << setfill('*') << setw(5) << y的效果一致。

内容的提问来源于stack exchange,提问作者Vivian Miranda

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 08:33:08