我已经有一段时间没有在StackOverflow上发布任何问题了;我希望我或多或少还记得回答问题的适当方法(提前道歉)。
我正在玩c++流和FMT库,它提供了c++ 23打印的预览。当设置填充符以完成整数的显示宽度时,流是冷的。例子:const int y = 730;
cout << "y = " << setw(5) << y << endl;
cout << "y = " << setfill('0') << setw(5) << y << endl;
cout << "y = " << setfill('X') << setw(5) << y << endl;
cout << "y = " << setfill('*') << setw(5) << y << endl;
输出为
y = 730
y = 00730
y = XX730
y = **730
我试图使用fmt::print设置相同的填充符(包括'X'和'*'字符)-类似于:
print("y = {:5d}n", y);
print("y = {:05d}n", y);
嗯,我没有包括'X'和'*'。我并不是说用随机字符作为填充物是个好主意;我只是好奇,因为我需要向学生解释这些命令之间的区别。
提前感谢。维维安
手册显示了整数格式说明符的以下语法:
format_spec ::= [[fill]align][sign]["#"]["0"][width]["." precision]["L"][type]
fill ::= <a character other than '{' or '}'>
align ::= "<" | ">" | "^"
这里format_spec
是{:
}
里面的部分。
所以指定自定义填充符(fill
)也需要指定对齐方式(您想要>
,即向右对齐):
fmt::print("y = {:X>5d}n", y); // XX730
fmt::print("y = {:*>5d}n", y); // **730
当给定填充字符时,对齐是强制性的。
print("y = {:*>5}n", y);