format()功能很强大,它把字符串当成一个模板,通过传入的参数进行格式化,并且使用大括号‘{}’作为特殊字符代替‘%’。
1、基本用法
- (1)不带编号,即“{}”
- (2)带数字编号,可调换顺序,即“{1}”、“{2}”
std::string str = std::format("{} {}!", "Hello", "world", "something"); // OK,产生 "Hello world"
std::string str = std::format("{0} {1}!", "Hello", "world", "something"); // OK,产生 "Hello world"
std::string str = std::format("{1} {0}!", "Hello", "world", "something"); // OK,产生 "world Hello!"
不带编号"{}"默认按参数顺序输入,带序号“{2}”则 按参数索引位置输入。
2、复杂点用法
格式说明:下面格式都是可选的,都不填的话 就等于用 上面的基本用法
[: 填充与对齐 (可选) 正负号 (可选) #(可选) 0(可选) 宽度 (可选) 精度 (可选) L(可选) 类型 (可选)]
char c = 120;
//宽度为6,默认按空格填充
auto s0 = std::format("{0:6}", 42); // s0 的值是 " 42"
auto s0 = std::format("{:6}", 42); // s0 的值是 " 42"
//宽度为6,默认按空格填充
auto s1 = std::format("{:6}", 'x'); // s1 的值是 "x "
//宽度为6 左对齐 用*号填充
auto s2 = std::format("{:*<6}", 'x'); // s2 的值是 "x*****"
//宽度为6 右对齐 用*号填充
auto s3 = std::format("{:*>6}", 'x'); // s3 的值是 "*****x"
//宽度为6 居中对齐 用*号填充
auto s4 = std::format("{:*^6}", 'x'); // s4 的值是 "**x***"
//宽度为6 按数字打印
auto s5 = std::format("{:6d}", c); // s5 的值是 " 120"
//宽度为6
auto s6 = std::format("{:6}", true); // s6 的值是 "true "
char c = 120;
auto s1 = std::format("{:+06d}", c); // s1 的值是 "+00120"
auto s1 = std::format("{:06d}", c); // s1 的值是 "000120"
float pi = 3.14f;
auto s1 = std::format("{:10f}", pi); // s1 = " 3.140000" (宽度 = 10)
auto s2 = std::format("{:{}f}", pi, 10); // s2 = " 3.140000" (宽度 = 10)
auto s3 = std::format("{:.5f}", pi); // s3 = "3.14000" (精度 = 5)
auto s4 = std::format("{:.{}f}", pi, 5); // s4 = "3.14000" (精度 = 5)
auto s5 = std::format("{:10.5f}", pi); // s5 = " 3.14000"
// (宽度 = 10,精度 = 5)
auto s6 = std::format("{:{}.{}f}", pi, 10, 5); // s6 = " 3.14000"
// (宽度 = 10,精度 = 5)
auto b1 = std::format("{:{}f}", pi, 10.0); // 抛出:宽度不是整数类型
auto b2 = std::format("{:{}f}", pi, -10); // 抛出:宽度为负
auto b3 = std::format("{:.{}f}", pi, 5.0); // 抛出:精度不是整数类型
格式控制符 和c语言的printf类似: