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

C++20 Text formatting

C++20  Text formatting  格式化字符串,  和 python 类似。

std::formatter - cppreference.com

string — Common string operations — Python 3.12.0 documentation

新格式库位于 <format> 头文件中。格式库基于 Python3 中的 str.format() 方法建模。格式字符串基本上与 Python 中的格式字符串相同,通常可以互换。

基本格式:format(填充与对齐(可选) 符号(可选) #(可选) 0(可选) 宽度(可选) 精度(可选) L(可选) 类型(可选))

	std::cout << std::format("{:.2}", std::numbers::pi);    //print : 3.1std::cout << std::format("{:.2f}", std::numbers::pi);   //print : 3.14

上述代码区别在于中括号内是否加入 f 关键字,也就是说若 {:.2} 则指保留两位有效数字,{:.2f} 则表示保留小数点后两位,但需要注意的是,数据类型不能是整形。

仅从 GCC 13 开始在 GCC 中可用。

C++ iomanip:
iomanip 是 C++ 标准库中的一个头文件,用于处理输入输出流中的格式化操作。

iomanip 头文件提供了一系列的流控制器(stream manipulators),可以用于格式化输入输出的方式。其中包括控制输出的精度、设置字段宽度、对齐方式等操作。

一些常用的 iomanip 控制器包括:

  • std::setw():设置字段宽度
  • std::setprecision():设置浮点数的精度
  • std::setfill():设置填充字符
  • std::left、std::right、std::internal:设置对齐方式
  • std::fixed、std::scientific:设置浮点数的输出格式
  • 等等。

通过包含 iomanip 头文件,并使用其中的流控制器,可以在输出流中以不同的格式进行输出,使输出结果更符合需求。
 

#include <iostream>
#include <iomanip>
#include <cmath>
using namespace std;int main()
{cout << fixed << right;cout << setw(6) << "N" << setw(14) << "square root"<< setw(15) << "fourth root\n";double root;for (int n = 10; n <= 100; n += 10){root = sqrt(double(n));cout << setw(6) << setfill('.') << n << setfill(' ')<< setw(12) << setprecision(3) << root<< setw(14) << setprecision(4) << sqrt(root)<< endl;}return 0;
}

输出:

#include <iostream>
#include <iomanip>       // std::setfill() std::setw()
//#include "stdint.h"      // uintptr_tint main()
{int a = 10;int* p = &a;uintptr_t p_addr = (uintptr_t)p;std::cout << std::uppercase << std::hex << std::setfill('0') << "Address of p = 0x" << p_addr << std::endl;// 恢复默认的格式设置std::cout << std::defaultfloat << std::setfill(' ');{std::cout << "Formatting Output Example" << std::endl;// 设置字段宽度为10个字符,并左对齐输出std::cout << std::setw(10) << std::left << "Name:" << std::setw(10) << std::left << "John" << std::endl;// 设置精度为2位小数std::cout << std::fixed << std::setprecision(2);// 输出一个浮点数,并设置字段宽度和填充字符std::cout << std::setw(10) << std::right << std::setfill('*') << "Value:";std::cout << std::setw(10) << std::right << std::setfill('#') << 3.14159 << std::endl;// 恢复默认的格式设置std::cout << std::defaultfloat << std::setfill(' ');}return 0;
}
编号方法和描述
1setiosflags - 它用于设置格式标志。
2resetiosflags - 用于重置格式标志。
3setbase - 它用于设置basefield标志。
4setfill - 它用于设置填充字符
5setprecision - 它用于设置小数精度。
6setw - 它用于设置字段宽度。
7get_money - 它用于获得货币值。
8put_money - 它用来设置计算货币的值。
9get_time - 它用于获取日期和时间。
10put_time - 它用于放置(或设置)日期和时间。

         控   制   符                            作           用                                     
 dec  设置整数为十进制
 hex 设置整数为十六进制
 oct 设置整数为八进制
 setbase(n) 设置整数为n进制(n=8,10,16)
 setfill(c)

 设置字符填充,c可以是字符常或字符变量

 setprecision(n) 设置浮点数的有效数字为n位
 setw(n) 设置字段宽度为n位
 setiosflags(ios::fixed) 设置浮点数以固定的小数位数显示
 setiosflags(ios::scientific)   设置浮点数以科学计数法表示
 setiosflags(ios::left) 输出左对齐
 setiosflags(ios::right) 输出右对齐
 setiosflags(ios::skipws) 忽略前导空格
 setiosflags(ios::uppercase) 在以科学计数法输出E与十六进制输出X以大写输出,否则小写。
 setiosflags(ios::showpos) 输出正数时显示"+"号
 setiosflags(ios::showpoint) 强制显示小数点
 resetiosflags() 

 终止已经设置的输出格式状态,在括号中应指定内容

在此需要说一下,有效位数默认是 6 位,即 setprecision(6),即小数点前面和小数点后面加起来的位数为 6 个有效数字(注意会四舍五入)。
另外,科学计数法输出 E 与十六进制输出默认是以小写的,要换成大写需添加 uppercase
而 setw(n) 设置宽度,若是实际宽度大于被设置的,则 setw 函数此时失效。

#include <iostream>
#include <iomanip>
#include <fstream>int main()
{// 前缀0表示八进制 前缀0x表示十六进制 不带前缀表示十进制int a = 123;double pi = 22.0/7.0;// setbase(n) 设置整数为n进制(n=8,10,16)// oct 八进制 dec 十进制 hex 十六进制// setiosflags(ios::showbase) 显示进制的前缀// 数值默认十进制显示输出std::cout << a << std::endl;std::cout << "oct: " << std::showbase << std::setbase(8) << a << " " << std::oct << a << std::endl;std::cout << "dec: " << std::showbase << std::setbase(10) << a << " " << std::dec << a << std::endl;std::cout << "hex: " << std::showbase << std::setbase(16) << a << " " << std::hex << a << std::endl;// setprecision(n) 设置浮点数的有效数字为n位// 有效位数默认是6位,即setprecision(6),即小数点前面和小数点后面加起来的位数为6个有效数字(注意会四舍五入)std::cout << pi << std::endl;std::cout << std::setprecision(12) << pi << std::endl;// setfill(n) 设置字符填充,c可以是字符常或字符变量// setw(n) 设置字段宽度为n位, 若是实际宽度大于被设置的,则setw函数此时失效, 只针对其后的第一个输出项有效// setiosflags(ios::left) 输出左对齐// setiosflags(ios::right) 输出右对齐 默认右对齐std::cout << std::setfill('*') << std::setw(20) << std::setprecision(12) << pi << std::endl;std::cout << std::setfill('*') << std::setw(20) << std::setprecision(12) << std::right << pi << std::endl;std::cout << std::setfill('*') << std::setw(20) << std::setprecision(12) << std::left << pi << std::endl;// setiosflags(ios::fixed) 设置浮点数以固定的小数位数显示std::cout << std::fixed << std::setprecision(12) << pi << std::endl;// setiosflags(ios::scientific)  设置浮点数以科学计数法表示 科学计数法输出E与十六进制输出默认是以小写的,要换成大写需添加uppercasestd::cout << std::scientific << std::setprecision(12) << pi << std::endl;std::cout << std::scientific << std::uppercase << std::setprecision(12) << pi << std::endl;// resetiosflags() 终止已经设置的输出格式状态,在括号中应指定内容std::cout << std::setiosflags(std::ios::scientific) << std::setprecision(12) << pi << "   " << std::resetiosflags(std::ios::scientific) << pi << std::endl;system("pause");return 0;
}

使用 printf sprintf snprintf fprintf vprintf fscanf sscanf :

【C/C++】format 格式化方法使用技巧(代码实例,皆可运行)_c++ format-CSDN博客

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

相关文章:

  • redis-plus-plus--github中文翻译--2
  • Vuex状态管理:Getters :VOA模式
  • 二十三种设计模式全面解析-享元模式(Flyweight Pattern)详解:构建高效共享的对象结构
  • 华为ensp:交换机接口划分vlan
  • PCBA表面污染的分类及处理方法
  • Linux开发工具之编辑器vim
  • 【Hadoop实战】Hadoop指标系统V2分析
  • 【java:牛客每日三十题总结-5】
  • 【Redis】set常用命令集合间操作内部编码使用场景
  • 94. 二叉树的中序遍历 --力扣 --JAVA
  • webpack babel
  • autollm 指令设计
  • 浙江大学漏洞报送证书
  • ROS 学习应用篇(三)服务Server学习之Server
  • vue+css动画 实现文字的上下轮播切换
  • debian/ubuntu/windows配置wiregurad内网服务器(包含掉线自启动)
  • LeetCode146.LRU缓存
  • 5-7 使用函数求余弦函数的近似
  • Kotlin HashMap entries.filter过滤forEach
  • css的预处理
  • [云原生案例2.2 ] Kubernetes的部署安装 【单master集群架构 ---- (二进制安装部署)】网络插件部分
  • Go开发基础环境搭建
  • Vue简单使用Echart图表柱形图 vue使用柱形图 vue使用 echart图表柱形图 vue使用柱形图
  • centos 7.9系统安装老版本jenkins,并解决插件问题
  • BMVC 23丨多模态CLIP:用于3D场景问答任务的对比视觉语言预训练
  • 《嵌入式虚拟化技术与应用》:深入浅出阐述嵌入式虚拟机原理,实现“小而能”嵌入式虚拟机!
  • 【Java开发】之获取客户端真实 IP 地址
  • Linux RPM包安装、卸载和升级
  • ROS 多级tf坐标转换
  • ceph rados对象存储索引残留问题排查与处理