当前位置: 首页 > news >正文

c++20 std::format 格式化说明

在标头<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"
//对于long long 类型 用"{:020d}" 超过int类型4个字节 也能正确打印,但按下面方式 不指定类型打印应该没问题
//宽度20 不足补0
long long num=4294967296123;
string str=std::format("{:020}",num);
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类似:

std::format是C++20中引入的一种新的字符串格式化方法。它使用类似Python的str.format风格的语法来格式化字符串。以下是一些常用的std::format格式控制符:{:b}:二进制表示{:d}:十进制表示{:o}:八进制表示{:x}:十六进制表示,使用小写字母{:X}:十六进制表示,使用大写字母{:c}:相应的Unicode字符{:s}:字符串(实际上是任何可以转换为字符串的类型){:a}:浮点数表示,使用科学计数法{:A}:浮点数表示,使用科学计数法,并且使用大写字母{:e}:浮点数表示,使用科学计数法,并且使用小写字母{:E}:浮点数表示,使用科学计数法,并且使用大写字母{:f}:浮点数表示,不使用科学计数法{:F}:与{:f}相同,但在某些平台上表现不同{:g}:根据值自动选择{:f}或{:e}{:G}:根据值自动选择{:f}或{:E}{:n}:与{:g}相同,但添加了千位分隔符{:p}:指针表示{:%%}:输出一个百分比符号(%)

http://www.lryc.cn/news/438639.html

相关文章:

  • HTB-Unified(log4j2漏洞、MongoDb替换管理员密码)
  • 每天五分钟深度学习PyTorch:不同的神经网络层设置不同的学习率
  • 【渗透测试】——DVWA靶场搭建
  • 国内人工智能产业发展现状及对策研究
  • 完整版订单超时自动取消功能
  • 算法刷题:300. 最长递增子序列、674. 最长连续递增序列、718. 最长重复子数组、1143. 最长公共子序列
  • go 笔记
  • 路由等保测评
  • C# 反射之动态生成dll/exe
  • Rust 所有权 Slices
  • windows 安全与网络管理问题
  • 基于Python实现一个庆祝国庆节的小程序
  • Anaconda 安装与使用教程
  • 时序预测SARIMAX模型
  • gin集成jaeger中间件实现链路追踪
  • 前端层面----监控与埋点
  • linux Command
  • uniapp登录页面( 适配:pc、小程序、h5)
  • 关于OceanBase 多模一体化的浅析
  • 快速git
  • 欺诈文本分类检测(十四):GPTQ量化模型
  • 2024.9.14(RC和RS)
  • 【算法随想录04】KMP 字符串匹配算法
  • TCP和MQTT通信协议
  • Python Pickle 与 JSON 序列化详解:存储、反序列化与对比
  • 第二百三十二节 JPA教程 - JPA教程 - JPA ID自动生成器示例、JPA ID生成策略示例
  • 计算机网络 ---- 计算机网络的体系结构【计算机网络的分层结构】
  • Vite + Electron 时,Electron 渲染空白,静态资源加载错误等问题解决
  • ZAB协议(算法)
  • 多个音频怎么合并?把多个音频合并在一起的方法推荐