<iomanip>库中setw(),setfill()等函数的使用

简介: <iomanip>库中setw(),setfill()等函数的使用

#include <iomanip>

#include<iomanip>是C++标准库中的一个头文件,提供了用于输入/输出格式控制的函数和类。它特别适用于调整输出的对齐、填充、精度等格式。

setw()

stew,这是一个用于操纵输出格式的函数,用于美化C++程序的输出格式,特别是在表格和对齐输出方面,属于iomanip库的一部分。setw代表“set width”,用于设置输出的宽度,控制输出内容在指定的宽度内对齐。

#include <iostream>
#include <iomanip>
int main() {
    int i = 7890;
    std::cout << std::setw(6) << i << std::endl;  
// 输出 " 7890",前面有两个空格以达到总宽度6
    double d = 12.3456;
    std::cout << std::setw(8) << std::setprecision(2) << d << std::endl; 
    return 0;
}

修改一下 :原先输出错误,输出结果如下

std::setw(int n)函数设置了接下来输出的宽度为n个字符。如果实际内容不足n个字符,会在前面或后面补充空格以达到设定的宽度,具体对齐方式取决于std::left(左对齐,默认)、std::right(右对齐)或std::internal(内部对齐,主要用于数字前导零)这些操纵符的使用情况。

setfill()

setfill是C++ <iomanip> 库中的一个操纵符,用于指定在使用其他格式控制时(如setw)用于填充的字符,默认情况下填充的字符是空格。这对于对齐输出,特别是数字前面填充零或使用特定字符以达到固定宽度输出时非常有用。setfill函数的基本形式是 std::setfill(char c),其中c是你希望用作填充的字符。

#include <iostream>
#include <iomanip>
int main() {
    // 输出数字,宽度设置为5,不足部分用0填充
    std::cout << std::setfill('0') << std::setw(5) << 42 << std::endl;
 // 输出:"00042"
    // 输出文本,宽度设置为10,不足部分用*填充
    std::cout << std::setfill('*') << std::setw(10) << "Hello" << std::endl;
 // 输出:"*****Hello"   
    return 0;
}

第一次使用setfill('0')设置了填充字符为0,随后的setw(5)指定了输出宽度为5,因此数字42前面被填充了三个0。第二次使用setfill('*')设置了填充字符为*,并在输出文本时通过setw(10)设置了宽度为10,导致文本Hello两侧被填充了星号以达到总宽度10。

setfill的影响仅作用于紧随其后的输出操作,且通常与setw一起使用以达到预期的格式效果。一旦设置了新的填充字符,它将一直生效直到再次被改变或程序结束,或者使用相应的操纵符重置格式设置。

类似函数

<iomanip>库还提供了许多其他有用的操纵符和函数,用于控制输出格式。

  1. setprecision: 用于设置浮点数的输出精度。例如,std::setprecision(2)将浮点数的输出限制为两位小数。
  2. fixed: 将浮点数的输出格式设置为固定小数点表示法。
  3. scientific: 将浮点数的输出格式设置为科学记数法。
  4. hex, oct, dec: 分别用于设置输出的基数为十六进制、八进制、十进制。
  5. left, right, internal: 控制对齐方式。left使内容左对齐,right使内容右对齐(默认),internal在数值中控制前导填充位置,比如在数字和其前导零之间填充。
  6. boolalpha: 当设置后,true和false将以文本形式而非数字形式输出。
  7. noshowpoint: 禁止在浮点数非零小数部分后显示小数点。
  8. showbase: 在输出整数时显示基数前缀(如在十六进制前加0x)。
  9. uppercase: 将字母转换为大写形式输出,常用于十六进制输出。
  10. nouppercase: 禁止转换为大写,恢复默认的小写输出。

这些操纵符通常结合使用,可以实现非常精细的输出格式控制。例如,要以十六进制、左对齐、宽度为8并以0填充的方式输出一个整数,可以这样操作:

std::cout << std::hex << std::setfill('0') << std::setw(8) << std::left << 255 << std::endl;

输出000000ff

目录
相关文章
|
存储 缓存 安全
第二章 HTTP请求方法、状态码详解与缓存机制解析
第二章 HTTP请求方法、状态码详解与缓存机制解析
635 0
|
6月前
|
人工智能 自然语言处理 JavaScript
小龙虾本地最简单的安装方法,直接安装其他的都弱爆了
OpenClaw虾壳云是一款面向Windows 10/11的AI自动化工具,v2.6.0版支持一键安装、全程可视化操作,内置Python/Node.js等全部依赖,5分钟极速部署。无需命令行,新手友好;需关闭杀软,路径须纯英文。开源可信,即装即用!
|
IDE 数据可视化 程序员
一文讲透:低代码平台是什么?低代码平台应该如何挑选?
低代码(Low Code)是一种通过可视化和配置化方式快速开发应用的技术工具平台,旨在减少手动编码量,提升开发效率。2014年Forrester定义其为“快速交付应用并简化部署”的工具,随后Gartner推广aPaaS/iPaaS概念,进一步推动其发展。低代码平台适用于数据管理、业务逻辑处理、权限控制、审批流程、报表分析等场景,支持手机访问、版本管理和日志记录等功能。挑选低代码平台需关注数据、逻辑、权限等11个关键问题。对程序员而言,低代码不仅降低开发门槛,还助力个人向产品/项目经理转型,创造更高价值。
2210 32
|
12月前
|
Ubuntu 编译器 计算机视觉
Ubuntu 20.04环境下无法找到#include<opencv/cv.h>文件 - 解决方案。
希望这些信息能帮助你解决遇到的问题。
583 10
|
机器学习/深度学习 人工智能 算法
科技云报到:假开源真噱头?开源大模型和你想的不一样!
科技云报到:假开源真噱头?开源大模型和你想的不一样!
638 3
|
Linux API 调度
xenomai内核解析-xenomai实时线程创建流程
本文介绍了linux硬实时操作系统xenomai pthread_creta()接口的底层实现原理,解释了如何在双内核间创建和调度一个xenomai任务。本文是基于源代码的分析,提供了详细的流程和注释,同时给出了结论部分,方便读者快速了解核心内容。
727 0
xenomai内核解析-xenomai实时线程创建流程
|
存储 Java 编译器
Java 中 .length 的使用方法:深入理解 Java 数据结构中的长度获取机制
本文深入解析了 Java 中 `.length` 的使用方法及其在不同数据结构中的应用。对于数组,通过 `.length` 属性获取元素数量;字符串则使用 `.length()` 方法计算字符数;集合类如 `ArrayList` 采用 `.size()` 方法统计元素个数。此外,基本数据类型和包装类不支持长度属性。掌握这些区别,有助于开发者避免常见错误,提升代码质量。
1258 1
|
机器学习/深度学习 人工智能 物联网
社区供稿 | 创作《哈利波特与异界魔书》的过程和心得
可图Kolors-LoRA风格故事挑战赛一等奖作品,以下是团队创作过程的详细回顾
|
存储 前端开发 C++
C++ 多线程之带返回值的线程处理函数
这篇文章介绍了在C++中使用`async`函数、`packaged_task`和`promise`三种方法来创建带返回值的线程处理函数。
1015 6