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

format(C++20)

1. std::format

format_01.cpp

// g++ format_01.cpp -std=c++20
#include <iostream>
#include <string>
#include <format>void test_01() {// 使用字符串填充std::cout << std::format("Hello {}!\n", "World");  // Hello World!// 提供的参数可以比placeholder多std::cout << std::format("Hello {}!\n", "World", 1, 2, 3);  // Hello World!// 可以通过占位符调整输出的顺序std::cout << std::format("{0} {1} {2} {3}\n", "Wang", "Zai", "Niu", "Nai");  // Wang Zai Niu Naistd::cout << std::format("{3} {2} {0} {1}\n", "Wang", "Zai", "Niu", "Nai");  // Nai Niu Wang Zaistd::cout << std::format("{0} ", "Hao", "Yu", "Zhi", "Shi", "Jie");  // Haostd::cout << std::format("{1} ", "Hao", "Yu", "Zhi", "Shi", "Jie");  // Yustd::cout << std::format("{2} ", "Hao", "Yu", "Zhi", "Shi", "Jie");  // Zhistd::cout << std::format("{3} ", "Hao", "Yu", "Zhi", "Shi", "Jie");  // Shistd::cout << std::format("{4}\n", "Hao", "Yu", "Zhi", "Shi", "Jie");  // Jie// 使用整数填充int a = 1, b = 2;int c = a + b;std::cout << std::format("{} + {} = {}\n", a, b, c);  // 1 + 2 = 3// 使用浮点数填充double d = 1.2, e = 3.5;double f = d + e;std::cout << std::format("{0} + {1} = {2}\n", d, e, f);  // 1.2 + 3.5 = 4.7
}int main() {test_01();
}

format_02.cpp

// g++ format_02.cpp -std=c++20
#include <iostream>
#include <string>
#include <format>void test_02(){/* {[arg_id][!spec][:[fill]align][sign][#][0][width][.precision][type]} */// 冒号前面的2表示占位符arg_id,输出第二个参数;// “:*^+100”中,^是fill表示居中对齐,20是align表示填充宽度,*是填充字符,+表示加法符号std::cout << std::format("{2:*^+20}\n", 56, 24, 36);   // ********+36*********// 填充宽度也可以用占位符、参数对来表示,如下面的3表示使用占位符的第三个参数作为填充宽度std::cout << std::format("{2:*^+{3}}\n", 56, 24, 36, 20);   // ********+36*********// 左右对齐std::cout << std::format("{0:}: {2:*<20}\n", "left-align", "right-align", -36);   // left-align: -36*****************std::cout << std::format("{1:}: {2:0>20}\n", "left-align", "right-align", 36);  // right-align: 00000000000000000036// 十六进制、十进制、八进制、二进制std::cout << std::format("{0:}: {4:^10X}\n", "HEX", "DEC", "OCT", "BIN", 15);   // HEX:     F std::cout << std::format("{0:}: {4:^#10X}\n", "HEX", "DEC", "OCT", "BIN", 15);  // HEX:    0XF std::cout << std::format("{0:}: {4:^#10x}\n", "HEX", "DEC", "OCT", "BIN", 15);  // HEX:    0xf std::cout << std::format("{3:}: {4:^#10B}\n", "HEX", "DEC", "OCT", "BIN", 15);  // BIN:   0B1111std::cout << std::format("{3:}: {4:^#10b}\n", "HEX", "DEC", "OCT", "BIN", 15);  // BIN:   0b1111 std::cout << std::format("{2:}: {4:^#10o}\n", "HEX", "DEC", "OCT", "BIN", 15);  // OCT:    017std::cout << std::format("{1:}: {4:^#10}\n", "HEX", "DEC", "OCT", "BIN", 15);   // DEC:     15// 精度double val = 3.14159265358 / 1.3;std::cout << std::format("{0:*^20.12}\n", val);   // ***2.41660973352****std::cout << std::format("{0:*^20.12f}\n", val);  // ***2.41660973352****std::cout << std::format("{0:.12g}\n", val);      // g是默认格式,2.41660973352std::cout << std::format("{0:.12e}\n", val);      // 2.416609733523e+00std::cout << std::format("{0:.12E}\n", val);      // 2.416609733523E+00std::cout << std::format("{0:.12a}\n", val);      // 1.355377be56a4p+1std::cout << std::format("{0:.12A}\n", val);      // 1.355377BE56A4P+1int width = 20, precision = 12;  // 总共20位,精度(小数位)占12位std::cout << std::format("{0:=^{1}.{2}E}\n", val, width, precision);  // =2.416609733523E+00=
}int main() {test_02();
}

2. std::format_tostd::format_to_nstd::formatted_size

format_03.cpp

#include <string>
#include <iostream>
#include <format>
#include <vector>void test_03(){double pi = 3.14159265358979;char content[50] = {'\0'};sprintf(content, "%f", pi);printf("%s\n", content);   // 3.141593std::cout << std::format("{}\n", pi);std::format_to_n(content, sizeof(content), "{}", pi);std::cout << content << std::endl;  // 3.14159265358979std::vector<char> vec1;std::format_to(std::back_inserter(vec1), "{}", pi);  // 3.14159265358979for(const auto&it: vec1){ std::cout << it;}std::cout << std::endl;// 计算格式化字符串需要的空间auto size = std::formatted_size("{}", pi);std::vector<char> vec2(size); std::format_to(vec2.data(), "{}", pi);  // 3.14159265358979for(const auto&it: vec2){ std::cout << it; }std::cout << std::endl;
}int main() {test_03();
}
http://www.lryc.cn/news/325340.html

相关文章:

  • Ftrans安全数据摆渡系统 构建便捷的内外网数据交换通道
  • 【云开发笔记No.14】持续交付、持续部署、持续交付流水线
  • 蓝桥杯练习07小兔子爬楼梯
  • Docker in Docker原理与实战
  • Ruoyi若依框架下载流程详细解读(SpringBoot-Vue)
  • 【深度学习】Pytorch中实现交叉熵损失计算的方式总结
  • 机器学习:处理jira工单的分类问题
  • 后端常问面经之操作系统
  • RK3568平台 iperf3测试网络性能
  • Spring Boot中实现对特定URL的权限验证:拦截器、切面和安全框架的比较
  • 【能源数据分析-00】能源领域数据集集锦(动态更新)
  • 数据挖掘与机器学习 1. 绪论
  • Matlab实现序贯变分模态分解(SVMD)
  • 云安全与云计算的关系
  • WPF 界面变量绑定(通知界面变化)
  • eclipse导入svn项目
  • Prompt提示工程上手指南:基础原理及实践(四)-检索增强生成(RAG)策略下的Prompt
  • 阿里云倚天云服务器怎么样?如何收费?
  • 海外社交营销为什么用云手机?不用普通手机?
  • 【Mysql数据库基础05】子查询 where、from、exists子查询、分页查询
  • 在Linux/Debian/Ubuntu上通过 Azure Data Studio 管理 SQL Server 2019
  • Java代码基础算法练习-搬砖问题-2024.03.25
  • Tomcat调优
  • 每日OJ题_栈①_力扣1047. 删除字符串中的所有相邻重复项
  • SQLServer SEQUENCE用法
  • Java中的代理模式(动态代理和静态代理)
  • 强化学习之父Richard Sutton:通往AGI的另一种可能
  • 【智能算法】秃鹰搜索算法(BES)原理及实现
  • 前端并发控制
  • 基于YOLOv8深度学习的橙子病害智能诊断与防治系统【python源码+Pyqt5界面+数据集+训练代码】深度学习实战、目标分类