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.hqwc.cn/news/168674.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

OpenCV-Python小应用(九):通过灰度直方图检测图像异常点

OpenCV-Python小应用&#xff08;九&#xff09;&#xff1a;通过灰度直方图检测图像异常点 前言前提条件相关介绍实验环境通过灰度直方图检测图像异常点代码实现输出结果 参考 前言 由于本人水平有限&#xff0c;难免出现错漏&#xff0c;敬请批评改正。更多精彩内容&#xff…

如何使用 NFTScan NFT API 在 zkSync 网络上开发 Web3 应用

zkSync 是由 Matter Labs 创建的&#xff0c;是一个以用户为中心的 zk rollup 平台&#xff0c;它是以太坊的第 2 层扩展解决方案&#xff0c;使用 zk-rollups 作为扩展技术&#xff0c;与 optimistic rollups 一样&#xff0c;zk-rollups 将会汇总以太坊主网上的交易并将交易证…

puzzle(1612)拼单词、wordlegame

目录 拼单词 wordlegame 拼单词 在线play 找出尽可能多的单词。 如果相邻的话&#xff08;在任何方向上&#xff09;&#xff0c;你可以拖拽鼠标从一个字母&#xff08;方格&#xff09;到另一个字母&#xff08;方格&#xff09;。在一个单词中&#xff0c;你不能多次使用…

LeetCode【701】二叉搜索数的插入操作

题目&#xff1a; 思路&#xff1a; https://zhuanlan.zhihu.com/p/272781596 代码&#xff1a; class Solution {public TreeNode insertIntoBST(TreeNode root, int val) {return process(root,val); }//递归public TreeNode process(TreeNode root,int val){//base ca…

ElasticSearch7.x - HTTP 操作 - 文档操作

创建文档(添加数据) 索引已经创建好了,接下来我们来创建文档,并添加数据。这里的文档可以类比为关系型数 据库中的表数据,添加的数据格式为 JSON 格式 向 ES 服务器发 POST 请求 :http://192.168.254.101:9200/shopping/_doc 请求体内容为: {"title":"小…

基于工业智能网关的汽车充电桩安全监测方案

近年来&#xff0c;我国新能源汽车产业得到快速发展&#xff0c;电动车产量和销量都在持续增长&#xff0c;不仅国内市场竞争激烈&#xff0c;而且也远销海外&#xff0c;成为新的经济增长点。但与此同时&#xff0c;充电设施的运营却面临着安全和效率的双重挑战。 当前的充电桩…

基于51单片机的篮球比赛计分器积分器

wx供重浩&#xff1a;创享日记 对话框发送&#xff1a;单片机篮球 获取完整源程序仿真源文件原理图文件论文报告等 基于51单片机的篮球计分器 由STC89C51单片机数码管显示模块按键模块电源模块构成 具体功能&#xff1a; &#xff08;1&#xff09;能记录单节比赛的比赛时间&am…

基于SSM的培训机构运营系统

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;Vue 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#xff1a;是 目录…

管理能力测评,如何提升管理能力?

管理能力是综合能力的体现&#xff0c;通常也解读为组织管理能力&#xff0c;如果要再细分的话&#xff0c;可能还包括有沟通能力&#xff0c;协调能力&#xff0c;组织能力&#xff0c;执行力和专业能力等等。不过没有办法说的太细节&#xff0c;因为每个部分铺开了都是一个独…

x3daudio1_7.dll怎么解决?x3daudio1_7.dll丢失的5个详细处理方法

首先&#xff0c;让我们来了解一下X3DAudio1_7.dll丢失的原因。X3DAudio1_7.dll是一个非常重要的动态链接库文件&#xff0c;它负责处理计算机中的音频输出。然而&#xff0c;由于各种原因&#xff0c;例如软件安装错误、病毒感染、系统升级等&#xff0c;我们可能会遇到X3DAud…

计算机网络技术

深入浅出计算机网络 微课视频_哔哩哔哩_bilibili 第一章概述 1.1 信息时代的计算机网络 1. 计算机网络各类应用 2. 计算机网络带来的负面问题 3. 我国互联网发展情况 1.2 因特网概述 1. 网络、互连网&#xff08;互联网&#xff09;与因特网的区别与关系 如图所示&#xff0…

每次重启完IDEA,application.properties文件里的中文变成?

出现这种情况&#xff0c;在IDEA打开Settings-->Editor-->File Encodings 然后&#xff0c;你需要将问号改为你需要的汉字。 重启IDEA&#xff0c;再次查看你的.properties文件就会发现再没有变成问号了