当前位置: 首页 > 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博客

相关文章:

C++20 Text formatting

C20 Text formatting 格式化字符串&#xff0c; 和 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模式

简介&#xff1a; Getters 用于对 Store 中的数据进行加工处理形成新的数据。 Getters 可以对 Store 中已有的数据加工处理之后形成新的数据&#xff0c;类似 Vue 的计算属性。 Store 中数据发生变化&#xff0c;Getters 的数据也会跟着变化。 案列 /src/store/index.js状态…...

二十三种设计模式全面解析-享元模式(Flyweight Pattern)详解:构建高效共享的对象结构

在软件开发中&#xff0c;我们经常会面临大量相似对象的创建和管理问题。这些相似对象的创建和销毁过程可能会占用大量的内存和系统资源&#xff0c;导致性能下降。为了解决这个问题&#xff0c;享元模式&#xff08;Flyweight Pattern&#xff09;应运而生。本文将深入探讨享元…...

华为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生产过程中&#xff0c;锡膏和助焊剂会产生残留物质&#xff0c;残留物中包含的有机酸和电离子&#xff0c;前者易腐蚀PCBA&#xff0c;后者会造成焊盘间短路故障。且近年来&#xff0c;用户对产品的清洁度要求越来越严格&#xff0c;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都是多模式编辑器&#xff0c;vim是vi的升级版本&a…...

【Hadoop实战】Hadoop指标系统V2分析

Hadoop指标系统V2分析 文章目录 Hadoop指标系统V2分析架构主要组成部分根据图表解释数据流向指标过滤JMX的应用开启指标系统的组件指标项说明 使用HTTP&#xff08;JMXJsonServlet&#xff09;获取指标接口调用方式GET查询的逻辑数据的来源&#xff0c;以及更新的原理 架构 在…...

【java:牛客每日三十题总结-5】

java:牛客每日三十题总结 总结如下 总结如下 -Xmx&#xff1a;最大堆大小 -Xms&#xff1a;初始堆大小 -Xmn:年轻代大小 -XXSurvivorRatio&#xff1a;年轻代中Eden区与Survivor区的大小比值 年轻代5120m&#xff0c; Eden&#xff1a;Survivor3&#xff0c;Survivor区大小102…...

【Redis】set常用命令集合间操作内部编码使用场景

文章目录 前置知识常见命令SADDSMEMBERSSISMEMBERSCARDSPOPSMOVESREM 集合间操作SINTERSINTERSTORESUNIONSUNIONSTORESDIFFSDIFFSTORE 命令小结内部编码测试内部编码 使用场景 前置知识 集合类型也是保存多个字符串类型的元素的&#xff0c;但和列表类型不同的是&#xff0c;在…...

94. 二叉树的中序遍历 --力扣 --JAVA

题目 给定一个二叉树的根节点 root &#xff0c;返回 它的 中序 遍历 。 解题思路 中序遍历的顺序为左中右&#xff1b;通过递归来遍历左子树、添加数据、遍历右子树&#xff1b; 代码展示 package zero.zero.nine;import java.util.ArrayList; import java.util.List;/*** …...

webpack babel

构建工具 简介 当我们习惯了在node中编写代码的方式后&#xff0c;在回到前端编写html、css、js这些东西会感觉到各种的不便。比如&#xff1a;不能放心的使用模块化规范&#xff08;浏览器兼容性问题&#xff09;、即使可以使用模块化规范也会面临模块过多时的加载问题。我们…...

autollm 指令设计

autollm 指令设计 可循环示意图文本 示意图AI解释可循环示意图 文本 示意图 # <|aos|>环境<|bos|>他人<|cos|>自己<|dos|>表示是否进行写python 代码来从外界获取辅助数据来重构 前面所有的信息<|eos|>代表是否生成python 代码控制各种外审设备…...

浙江大学漏洞报送证书

获取来源&#xff1a;edusrc&#xff08;教育漏洞报告平台&#xff09; url&#xff1a;主页 | 教育漏洞报告平台 兑换价格&#xff1a;20金币 获取条件&#xff1a;提交浙江大学任意中危或以上级别漏洞...

ROS 学习应用篇(三)服务Server学习之Server

话题Topic是订阅器与发布器节点之间的&#xff0c;而服务则是客户端&#xff08;Client&#xff09;和服务器&#xff08;Server&#xff09;间的&#xff0c;前者是异步的&#xff0c;后者是同步的。而且话题是单项的不需要服务器上线&#xff0c;而服务是双向的。在开启服务之…...

vue+css动画 实现文字的上下轮播切换

突然间碰到一个比较丝滑的特效,就研究了一下想把它实现出来。 效果:渐隐消失,底部往上走覆盖出现 以下是完整代码,复制粘贴即可运行 <template><div class="aaa"><divclass="page1":class="{ private-fade-out: prevIndex === 1…...

debian/ubuntu/windows配置wiregurad内网服务器(包含掉线自启动)

文章目录 前言一、服务器配置安装wireguard软件生成私钥公钥配置服务器参数配置服务器sysctl参数启动、停止服务端 二、用户端配置安装wireguard软件生成私钥公钥配置客户端参数启动、停止客户端配置服务开机启动 三、服务器添加、删除客户四、配置掉线自启动配置掉线自启动脚本…...

LeetCode146.LRU缓存

写了一个小时&#xff0c;终于把示例跑过了&#xff0c;没想到啊提交之后第19/22个测试用例没过 我把测试用例的输出复制在word上看看和我的有什么不同&#xff0c;没想到有18页的word&#xff0c;然后我一直检查终于找出了问题&#xff0c;而且这个bug真的太活该了&#xff0c…...

5-7 使用函数求余弦函数的近似

实现一个函数&#xff0c;用下列公式求cos(x)的近似值&#xff0c;精确到最后一项的绝对值小于e&#xff1a;‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬…...

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服务管理暂行办法》双约束下,如何重构用户意图建模链路?

第一章&#xff1a;生成式推荐算法合规性悬崖&#xff1a;GDPR/《生成式AI服务管理暂行办法》双约束下&#xff0c;如何重构用户意图建模链路&#xff1f; 2026奇点智能技术大会(https://ml-summit.org) 在生成式推荐系统中&#xff0c;用户意图建模正面临前所未有的合规性临界…...

楚汉传奇---Python脚本

脚本如下#!/usr/bin/env python3 # -*- coding: utf-8 -*-""" YouTube 下载工具 (基于 yt-dlp) 支持&#xff1a;单个视频、播放列表、仅音频、画质选择、进度显示、错误重试等 """import yt_dlp import os import sys import argparse import s…...

从零构建垃圾分类识别系统:基于8万张图片与TensorFlow的实战指南

1. 项目背景与数据集介绍 垃圾分类识别系统听起来高大上&#xff0c;但其实离我们日常生活特别近。去年我帮小区物业做了一套这样的系统&#xff0c;从零开始折腾了两个月&#xff0c;踩了不少坑&#xff0c;也积累了不少实战经验。这次就用8万张图片的数据集为例&#xff0c;…...

**发散创新:基于Python与ROS的机器人运动控制实战解析**在现代机器人系统开发中,*

发散创新&#xff1a;基于Python与ROS的机器人运动控制实战解析 在现代机器人系统开发中&#xff0c;运动控制是实现精准动作的核心环节。本文将以 Python ROS&#xff08;Robot Operating System&#xff09; 为技术栈&#xff0c;深入剖析如何通过编程语言完成对差速驱动机器…...

魔兽争霸III终极优化指南:用Warcraft Helper解决Windows兼容性问题

魔兽争霸III终极优化指南&#xff1a;用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基础教程&#xff1a;零代码实现LangChain链式调用 1. 什么是Flowise&#xff1f; 如果你对AI应用开发感兴趣&#xff0c;但看到代码就头疼&#xff0c;那么Flowise就是为你量身打造的工具。简单来说&#xff0c;Flowise是一个让你用"拖拖拉拉"的方式就能构…...

【2026奇点智能技术大会权威内参】:AI重构建议的5大底层逻辑与企业落地优先级清单

第一章&#xff1a;AI重构建议的范式跃迁与奇点共识 2026奇点智能技术大会(https://ml-summit.org) 传统推荐系统依赖显式反馈与协同过滤&#xff0c;而新一代AI建议引擎正以隐式意图建模、多模态对齐与反事实推理为基石&#xff0c;实现从“预测用户会点什么”到“协同定义用…...

网易云音乐NCM文件转换终极指南:3分钟解锁你的音乐收藏

网易云音乐NCM文件转换终极指南&#xff1a;3分钟解锁你的音乐收藏 【免费下载链接】ncmdumpGUI C#版本网易云音乐ncm文件格式转换&#xff0c;Windows图形界面版本 项目地址: https://gitcode.com/gh_mirrors/nc/ncmdumpGUI 还在为网易云音乐下载的NCM文件无法在其他播…...

从代码审计到漏洞挖掘:深度解析Gerapy项目管理模块的RCE漏洞(CVE-2021-32849)

从代码审计到漏洞挖掘&#xff1a;深度解析Gerapy项目管理模块的RCE漏洞&#xff08;CVE-2021-32849&#xff09; 在分布式爬虫管理领域&#xff0c;Gerapy作为整合Scrapy、Django等技术栈的解决方案&#xff0c;其安全性直接影响企业数据采集业务的稳定性。2021年曝光的CVE-20…...

MicroPython中断处理实战:如何避免内存分配陷阱(附代码示例)

MicroPython中断处理实战&#xff1a;如何避免内存分配陷阱&#xff08;附代码示例&#xff09; 嵌入式开发者在使用MicroPython进行硬件编程时&#xff0c;中断处理是不可或缺的核心技术。然而&#xff0c;许多开发者都曾遇到过这样的困境&#xff1a;精心设计的中断服务程序(…...