std::setw和std::setfill仅支持单向填充,无内置双向填充;需手动计算左右填充长度:右对齐右补、左对齐左补、居中则左右均分。

用 std::setw 和 std::setfill 做基础单向填充,但默认不支持“双向”语义
标准库没有叫“双向填充”的现成工具——所谓“双向”,其实是“左对齐时右补、右对齐时左补、居中时左右均分补”,而 std::setw + std::setfill 只控制宽度和填充字符,对齐方向由 std::left/std::right/std::internal 决定,std::internal 仅对带符号数值有效,对字符串无效。
所以必须自己算左右填充长度。关键判断逻辑是:target_width 时直接输出原串(不截断),否则按对齐方式分配空格(或指定填充符)到左右两侧。
实操建议:
- 先用
str.length()获取原始长度,避免误用c_str()+strlen(对含