CppFormat 格式字符串语法详解
【免费下载链接】fmt 项目地址: https://gitcode.com/gh_mirrors/fmt5/fmt
格式字符串基础概念
CppFormat 库提供了一套强大而灵活的格式字符串语法,用于控制变量在输出时的表现形式。格式字符串由普通文本和替换字段组成,替换字段用大括号 {} 包围。
基本语法规则
- 普通文本:不在大括号内的内容会原样输出
- 转义大括号:需要输出
{或}时,使用双写形式{{和}} - 替换字段:基本形式为
{[参数标识][:格式说明]}
参数标识的用法
参数标识用于指定要格式化的参数,支持两种形式:
- 位置参数:使用数字索引,如
{0}、{1} - 命名参数:使用标识符名称,如
{name}、{age}
位置参数的简写
当参数按顺序排列时(0,1,2,...),可以省略索引号:
"From {} to {}" // 等价于 "From {0} to {1}"
格式说明详解
格式说明部分以冒号 : 开头,控制值的显示方式。基本结构如下:
[[填充]对齐][符号]["#"][0][宽度]["."精度]["L"][类型]
对齐与填充
-
对齐选项:
<:左对齐(字符串默认)>:右对齐(数字默认)^:居中对齐
-
填充字符:
- 可以是任意Unicode字符(除
{和}) - 填充字符必须与对齐选项一起使用
- 可以是任意Unicode字符(除
示例:
"{:*<10}" // 左对齐,宽度10,用*填充不足部分
数字格式控制
-
符号控制:
+:正负数都显示符号-:仅负数显示符号(默认)- 空格:正数前加空格,负数前加减号
-
特殊格式:
#:显示进制前缀(0x, 0b, 0)0:数字前补零L:使用本地化数字分隔符
-
宽度与精度:
- 宽度:最小输出长度
- 精度:浮点数小数位数或字符串最大长度
类型说明符详解
字符串类型
| 类型 | 说明 |
|---|---|
s | 字符串格式(默认) |
? | 调试格式(转义特殊字符) |
字符类型
| 类型 | 说明 |
|---|---|
c | 字符格式(默认) |
? | 调试格式(转义特殊字符) |
整数类型
| 类型 | 说明 | 示例 |
|---|---|---|
b | 二进制 | 1010 |
B | 二进制(大写前缀) | 0B1010 |
d | 十进制(默认) | 42 |
o | 八进制 | 52 |
x | 十六进制(小写) | 2a |
X | 十六进制(大写) | 2A |
浮点数类型
| 类型 | 说明 | 示例 |
|---|---|---|
f | 定点表示法 | 3.141593 |
e | 科学计数法(小写e) | 3.141593e+00 |
E | 科学计数法(大写E) | 3.141593E+00 |
g | 自动选择f或e | 3.14159 |
a | 十六进制浮点 | 0x1.921fb5p+1 |
指针类型
| 类型 | 说明 |
|---|---|
p | 指针格式(默认) |
时间日期格式化
CppFormat 支持对时间点和持续时间进行格式化,语法类似于 strftime:
%Y - 四位年份
%m - 两位月份
%d - 两位日期
%H - 24小时制小时
%M - 分钟
%S - 秒
示例:
"{:%Y-%m-%d %H:%M:%S}" // 输出类似 "2023-05-15 14:30:00"
实际应用示例
- 基本格式化:
fmt::format("Hello, {}!", "world"); // "Hello, world!"
- 数字格式化:
fmt::format("{:.2f}", 3.14159); // "3.14"
- 对齐与填充:
fmt::format("{:*^10}", "hi"); // "****hi****"
- 进制转换:
fmt::format("{:#x}", 42); // "0x2a"
- 时间格式化:
auto now = std::chrono::system_clock::now();
fmt::format("{:%Y-%m-%d}", now); // "2023-05-15"
通过掌握这些格式化语法,开发者可以精确控制各种类型数据的输出格式,满足各种复杂的显示需求。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



