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 $…...
生成式推荐算法合规性悬崖:GDPR/《生成式AI服务管理暂行办法》双约束下,如何重构用户意图建模链路?
第一章:生成式推荐算法合规性悬崖:GDPR/《生成式AI服务管理暂行办法》双约束下,如何重构用户意图建模链路? 2026奇点智能技术大会(https://ml-summit.org) 在生成式推荐系统中,用户意图建模正面临前所未有的合规性临界…...
楚汉传奇---Python脚本
脚本如下#!/usr/bin/env python3 # -*- coding: utf-8 -*-""" YouTube 下载工具 (基于 yt-dlp) 支持:单个视频、播放列表、仅音频、画质选择、进度显示、错误重试等 """import yt_dlp import os import sys import argparse import s…...
从零构建垃圾分类识别系统:基于8万张图片与TensorFlow的实战指南
1. 项目背景与数据集介绍 垃圾分类识别系统听起来高大上,但其实离我们日常生活特别近。去年我帮小区物业做了一套这样的系统,从零开始折腾了两个月,踩了不少坑,也积累了不少实战经验。这次就用8万张图片的数据集为例,…...
**发散创新:基于Python与ROS的机器人运动控制实战解析**在现代机器人系统开发中,*
发散创新:基于Python与ROS的机器人运动控制实战解析 在现代机器人系统开发中,运动控制是实现精准动作的核心环节。本文将以 Python ROS(Robot Operating System) 为技术栈,深入剖析如何通过编程语言完成对差速驱动机器…...
魔兽争霸III终极优化指南:用Warcraft Helper解决Windows兼容性问题
魔兽争霸III终极优化指南:用Warcraft Helper解决Windows兼容性问题 【免费下载链接】WarcraftHelper Warcraft III Helper , support 1.20e, 1.24e, 1.26a, 1.27a, 1.27b 项目地址: https://gitcode.com/gh_mirrors/wa/WarcraftHelper 还在为魔兽争霸III在Wi…...
Flowise基础教程:零代码实现LangChain链式调用
Flowise基础教程:零代码实现LangChain链式调用 1. 什么是Flowise? 如果你对AI应用开发感兴趣,但看到代码就头疼,那么Flowise就是为你量身打造的工具。简单来说,Flowise是一个让你用"拖拖拉拉"的方式就能构…...
【2026奇点智能技术大会权威内参】:AI重构建议的5大底层逻辑与企业落地优先级清单
第一章:AI重构建议的范式跃迁与奇点共识 2026奇点智能技术大会(https://ml-summit.org) 传统推荐系统依赖显式反馈与协同过滤,而新一代AI建议引擎正以隐式意图建模、多模态对齐与反事实推理为基石,实现从“预测用户会点什么”到“协同定义用…...
网易云音乐NCM文件转换终极指南:3分钟解锁你的音乐收藏
网易云音乐NCM文件转换终极指南:3分钟解锁你的音乐收藏 【免费下载链接】ncmdumpGUI C#版本网易云音乐ncm文件格式转换,Windows图形界面版本 项目地址: https://gitcode.com/gh_mirrors/nc/ncmdumpGUI 还在为网易云音乐下载的NCM文件无法在其他播…...
从代码审计到漏洞挖掘:深度解析Gerapy项目管理模块的RCE漏洞(CVE-2021-32849)
从代码审计到漏洞挖掘:深度解析Gerapy项目管理模块的RCE漏洞(CVE-2021-32849) 在分布式爬虫管理领域,Gerapy作为整合Scrapy、Django等技术栈的解决方案,其安全性直接影响企业数据采集业务的稳定性。2021年曝光的CVE-20…...
MicroPython中断处理实战:如何避免内存分配陷阱(附代码示例)
MicroPython中断处理实战:如何避免内存分配陷阱(附代码示例) 嵌入式开发者在使用MicroPython进行硬件编程时,中断处理是不可或缺的核心技术。然而,许多开发者都曾遇到过这样的困境:精心设计的中断服务程序(…...
