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;
}
| 编号 | 方法和描述 |
|---|---|
| 1 | setiosflags - 它用于设置格式标志。 |
| 2 | resetiosflags - 用于重置格式标志。 |
| 3 | setbase - 它用于设置basefield标志。 |
| 4 | setfill - 它用于设置填充字符 |
| 5 | setprecision - 它用于设置小数精度。 |
| 6 | setw - 它用于设置字段宽度。 |
| 7 | get_money - 它用于获得货币值。 |
| 8 | put_money - 它用来设置计算货币的值。 |
| 9 | get_time - 它用于获取日期和时间。 |
| 10 | put_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博客
相关文章:
C++20 Text formatting
C20 Text formatting 格式化字符串, 和 python 类似。 std::formatter - cppreference.com string — Common string operations — Python 3.12.0 documentation 新格式库位于 <format> 头文件中。格式库基于 Python3 中的 str.format() 方法建模。格式…...
redis-plus-plus--github中文翻译--2
12 能不能举个例子 当然可以。以下是一个具体的例子,说明如何使用cmake命令为redis-plus-plus配置编译和安装路径: 假设: hiredis 被安装在 /opt/libs/hiredis你想要将 redis-plus-plus 安装到 /opt/libs/redis-plus-plus那么,你可以使用以下的 cmake 命令: cmake -DCM…...
Vuex状态管理:Getters :VOA模式
简介: Getters 用于对 Store 中的数据进行加工处理形成新的数据。 Getters 可以对 Store 中已有的数据加工处理之后形成新的数据,类似 Vue 的计算属性。 Store 中数据发生变化,Getters 的数据也会跟着变化。 案列 /src/store/index.js状态…...
二十三种设计模式全面解析-享元模式(Flyweight Pattern)详解:构建高效共享的对象结构
在软件开发中,我们经常会面临大量相似对象的创建和管理问题。这些相似对象的创建和销毁过程可能会占用大量的内存和系统资源,导致性能下降。为了解决这个问题,享元模式(Flyweight Pattern)应运而生。本文将深入探讨享元…...
华为ensp:交换机接口划分vlan
现在要把 e0/0/1 接口放入vlan1 e0/0/2 接口放入vlan2 e0/0/3 接口放入vlan3 默认所有接口都在vlan1所以 e0/0/0 接口不用动 1.创建vlan 进入系统视图模式 直接输入 vlan 编号 即可创建对应vlan vlan 编号 vlan 2 创建vlan2 vlan 3 创建vlan3 2.将接口进入vlan…...
PCBA表面污染的分类及处理方法
NO.1 引言 在PCBA生产过程中,锡膏和助焊剂会产生残留物质,残留物中包含的有机酸和电离子,前者易腐蚀PCBA,后者会造成焊盘间短路故障。且近年来,用户对产品的清洁度要求越来越严格,PCBA清洗工艺逐渐被电子组…...
Linux开发工具之编辑器vim
文章目录 1.vim是啥?1.1问问度娘1.2自己总结 2.vim的初步了解2.1进入和退出2.2vim的模式1.介绍2.使用 3.vim的配置3.1自己配置3.2下载插件3.3安装大佬配置好的文件 4.程序的翻译 1.vim是啥? 1.1问问度娘 1.2自己总结 vi/vim都是多模式编辑器,vim是vi的升级版本&a…...
【Hadoop实战】Hadoop指标系统V2分析
Hadoop指标系统V2分析 文章目录 Hadoop指标系统V2分析架构主要组成部分根据图表解释数据流向指标过滤JMX的应用开启指标系统的组件指标项说明 使用HTTP(JMXJsonServlet)获取指标接口调用方式GET查询的逻辑数据的来源,以及更新的原理 架构 在…...
【java:牛客每日三十题总结-5】
java:牛客每日三十题总结 总结如下 总结如下 -Xmx:最大堆大小 -Xms:初始堆大小 -Xmn:年轻代大小 -XXSurvivorRatio:年轻代中Eden区与Survivor区的大小比值 年轻代5120m, Eden:Survivor3,Survivor区大小102…...
【Redis】set常用命令集合间操作内部编码使用场景
文章目录 前置知识常见命令SADDSMEMBERSSISMEMBERSCARDSPOPSMOVESREM 集合间操作SINTERSINTERSTORESUNIONSUNIONSTORESDIFFSDIFFSTORE 命令小结内部编码测试内部编码 使用场景 前置知识 集合类型也是保存多个字符串类型的元素的,但和列表类型不同的是,在…...
94. 二叉树的中序遍历 --力扣 --JAVA
题目 给定一个二叉树的根节点 root ,返回 它的 中序 遍历 。 解题思路 中序遍历的顺序为左中右;通过递归来遍历左子树、添加数据、遍历右子树; 代码展示 package zero.zero.nine;import java.util.ArrayList; import java.util.List;/*** …...
webpack babel
构建工具 简介 当我们习惯了在node中编写代码的方式后,在回到前端编写html、css、js这些东西会感觉到各种的不便。比如:不能放心的使用模块化规范(浏览器兼容性问题)、即使可以使用模块化规范也会面临模块过多时的加载问题。我们…...
autollm 指令设计
autollm 指令设计 可循环示意图文本 示意图AI解释可循环示意图 文本 示意图 # <|aos|>环境<|bos|>他人<|cos|>自己<|dos|>表示是否进行写python 代码来从外界获取辅助数据来重构 前面所有的信息<|eos|>代表是否生成python 代码控制各种外审设备…...
浙江大学漏洞报送证书
获取来源:edusrc(教育漏洞报告平台) url:主页 | 教育漏洞报告平台 兑换价格:20金币 获取条件:提交浙江大学任意中危或以上级别漏洞...
ROS 学习应用篇(三)服务Server学习之Server
话题Topic是订阅器与发布器节点之间的,而服务则是客户端(Client)和服务器(Server)间的,前者是异步的,后者是同步的。而且话题是单项的不需要服务器上线,而服务是双向的。在开启服务之…...
vue+css动画 实现文字的上下轮播切换
突然间碰到一个比较丝滑的特效,就研究了一下想把它实现出来。 效果:渐隐消失,底部往上走覆盖出现 以下是完整代码,复制粘贴即可运行 <template><div class="aaa"><divclass="page1":class="{ private-fade-out: prevIndex === 1…...
debian/ubuntu/windows配置wiregurad内网服务器(包含掉线自启动)
文章目录 前言一、服务器配置安装wireguard软件生成私钥公钥配置服务器参数配置服务器sysctl参数启动、停止服务端 二、用户端配置安装wireguard软件生成私钥公钥配置客户端参数启动、停止客户端配置服务开机启动 三、服务器添加、删除客户四、配置掉线自启动配置掉线自启动脚本…...
LeetCode146.LRU缓存
写了一个小时,终于把示例跑过了,没想到啊提交之后第19/22个测试用例没过 我把测试用例的输出复制在word上看看和我的有什么不同,没想到有18页的word,然后我一直检查终于找出了问题,而且这个bug真的太活该了,…...
5-7 使用函数求余弦函数的近似
实现一个函数,用下列公式求cos(x)的近似值,精确到最后一项的绝对值小于e:…...
Kotlin HashMap entries.filter过滤forEach
Kotlin HashMap entries.filter过滤forEach fun main(args: Array<String>) {val hashMap HashMap<String, Int>()hashMap["a"] 1hashMap["b"] 2hashMap["c"] 3println(hashMap)hashMap.entries.filter {println("filter $…...
Lombok 的 @Data 注解失效,未生成 getter/setter 方法引发的HTTP 406 错误
HTTP 状态码 406 (Not Acceptable) 和 500 (Internal Server Error) 是两类完全不同的错误,它们的含义、原因和解决方法都有显著区别。以下是详细对比: 1. HTTP 406 (Not Acceptable) 含义: 客户端请求的内容类型与服务器支持的内容类型不匹…...
以下是对华为 HarmonyOS NETX 5属性动画(ArkTS)文档的结构化整理,通过层级标题、表格和代码块提升可读性:
一、属性动画概述NETX 作用:实现组件通用属性的渐变过渡效果,提升用户体验。支持属性:width、height、backgroundColor、opacity、scale、rotate、translate等。注意事项: 布局类属性(如宽高)变化时&#…...
电脑插入多块移动硬盘后经常出现卡顿和蓝屏
当电脑在插入多块移动硬盘后频繁出现卡顿和蓝屏问题时,可能涉及硬件资源冲突、驱动兼容性、供电不足或系统设置等多方面原因。以下是逐步排查和解决方案: 1. 检查电源供电问题 问题原因:多块移动硬盘同时运行可能导致USB接口供电不足&#x…...
linux 下常用变更-8
1、删除普通用户 查询用户初始UID和GIDls -l /home/ ###家目录中查看UID cat /etc/group ###此文件查看GID删除用户1.编辑文件 /etc/passwd 找到对应的行,YW343:x:0:0::/home/YW343:/bin/bash 2.将标红的位置修改为用户对应初始UID和GID: YW3…...
JUC笔记(上)-复习 涉及死锁 volatile synchronized CAS 原子操作
一、上下文切换 即使单核CPU也可以进行多线程执行代码,CPU会给每个线程分配CPU时间片来实现这个机制。时间片非常短,所以CPU会不断地切换线程执行,从而让我们感觉多个线程是同时执行的。时间片一般是十几毫秒(ms)。通过时间片分配算法执行。…...
Unit 1 深度强化学习简介
Deep RL Course ——Unit 1 Introduction 从理论和实践层面深入学习深度强化学习。学会使用知名的深度强化学习库,例如 Stable Baselines3、RL Baselines3 Zoo、Sample Factory 和 CleanRL。在独特的环境中训练智能体,比如 SnowballFight、Huggy the Do…...
蓝桥杯3498 01串的熵
问题描述 对于一个长度为 23333333的 01 串, 如果其信息熵为 11625907.5798, 且 0 出现次数比 1 少, 那么这个 01 串中 0 出现了多少次? #include<iostream> #include<cmath> using namespace std;int n 23333333;int main() {//枚举 0 出现的次数//因…...
项目部署到Linux上时遇到的错误(Redis,MySQL,无法正确连接,地址占用问题)
Redis无法正确连接 在运行jar包时出现了这样的错误 查询得知问题核心在于Redis连接失败,具体原因是客户端发送了密码认证请求,但Redis服务器未设置密码 1.为Redis设置密码(匹配客户端配置) 步骤: 1).修…...
AI书签管理工具开发全记录(十九):嵌入资源处理
1.前言 📝 在上一篇文章中,我们完成了书签的导入导出功能。本篇文章我们研究如何处理嵌入资源,方便后续将资源打包到一个可执行文件中。 2.embed介绍 🎯 Go 1.16 引入了革命性的 embed 包,彻底改变了静态资源管理的…...
听写流程自动化实践,轻量级教育辅助
随着智能教育工具的发展,越来越多的传统学习方式正在被数字化、自动化所优化。听写作为语文、英语等学科中重要的基础训练形式,也迎来了更高效的解决方案。 这是一款轻量但功能强大的听写辅助工具。它是基于本地词库与可选在线语音引擎构建,…...
