fmtlib/fmt 格式化字符串语法详解
【免费下载链接】fmt A modern formatting library 项目地址: https://gitcode.com/GitHub_Trending/fm/fmt
fmtlib/fmt 是一个现代 C++ 格式化库,提供了高效、安全的格式化功能。本文将深入解析其格式化字符串语法,帮助开发者掌握其核心用法。
基础语法结构
fmtlib/fmt 的格式化字符串使用大括号 {} 作为占位符,包含两个主要部分:
- 参数标识符 (arg_id):指定要格式化的参数
- 格式规范 (format_spec):定义如何格式化参数
基本语法如下:
replacement_field ::= "{" [arg_id] [":" (format_spec | chrono_format_spec)] "}"
参数标识符规则
参数标识符可以是:
- 整数:
0,1,2... - 标识符:字母或下划线开头的字符串
当参数标识符按顺序从0开始连续排列时,可以全部省略:
"First, thou shalt count to {0}" // 显式引用第一个参数
"Bring me a {}" // 隐式引用第一个参数
"From {} to {}" // 等同于 "From {0} to {1}"
格式规范详解
格式规范定义了值的显示方式,包括对齐、填充、精度等。基本结构为:
format_spec ::= [[fill]align][sign]["#"]["0"][width]["." precision]["L"][type]
对齐与填充
| 选项 | 说明 |
|---|---|
'<' | 左对齐(大多数类型的默认值) |
'>' | 右对齐(数字的默认值) |
'^' | 居中对齐 |
填充字符可以是除 { 和 } 外的任何 Unicode 字符。例如:
fmt::format("{:*^10}", "hello"); // 输出 "**hello***"
符号控制
| 选项 | 说明 |
|---|---|
'+' | 正负数都显示符号 |
'-' | 仅负数显示符号(默认) |
| 空格 | 正数前加空格,负数前加负号 |
特殊格式选项
'#':使用替代形式(如十六进制添加0x前缀)'0':数字前补零'L':使用本地化数字分隔符
类型说明符
不同类型有不同的格式选项:
整数类型
| 类型 | 说明 |
|---|---|
'b' | 二进制(如 0b1010) |
'B' | 二进制(大写前缀 0B) |
'd' | 十进制(默认) |
'o' | 八进制 |
'x' | 小写十六进制 |
'X' | 大写十六进制 |
浮点数类型
| 类型 | 说明 |
|---|---|
'f' | 固定小数格式 |
'F' | 固定小数格式(大写 INF/NAN) |
'e' | 科学计数法(小写 e) |
'E' | 科学计数法(大写 E) |
'g' | 自动选择 f 或 e |
'G' | 自动选择 F 或 E |
字符串类型
| 类型 | 说明 |
|---|---|
's' | 字符串(默认) |
'?' | 调试格式(转义特殊字符) |
时间日期格式化
fmtlib/fmt 支持对 std::chrono 类型和 std::tm 进行格式化,语法类似 strftime:
chrono_format_spec ::= [[fill]align][width]["." precision][chrono_specs]
常用时间格式说明符:
| 说明符 | 说明 |
|---|---|
%Y | 四位年份 |
%m | 两位月份 |
%d | 两位日期 |
%H | 24小时制小时 |
%M | 分钟 |
%S | 秒 |
%A | 完整星期名 |
%B | 完整月份名 |
示例:
auto now = std::chrono::system_clock::now();
fmt::print("{:%Y-%m-%d %H:%M:%S}", now); // 输出 "2023-11-15 14:30:00"
实际应用技巧
-
动态格式控制:可以在格式规范中嵌套参数
fmt::print("{:.{}f}", 3.14159, 2); // 输出 "3.14" -
本地化数字显示:使用
'L'选项fmt::print("{:L}", 1000); // 可能输出 "1,000" 或 "1.000" -
二进制输出:
fmt::print("{:#b}", 10); // 输出 "0b1010" -
对齐填充组合:
fmt::print("{:*>10}", "hi"); // 输出 "********hi"
掌握这些格式化技巧可以显著提升 C++ 程序的输出质量和开发效率。fmtlib/fmt 的格式化语法既强大又灵活,能够满足各种复杂的格式化需求。
【免费下载链接】fmt A modern formatting library 项目地址: https://gitcode.com/GitHub_Trending/fm/fmt
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



