<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: 当设置后,truefalse将以文本形式而非数字形式输出
  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

目录
相关文章
|
JavaScript 前端开发 Linux
QCefView初步使用
QCefView初步使用
1494 0
|
Python
使用Python将文本转换成语音?
使用Python将文本转换成语音?
739 0
|
9月前
|
Ubuntu 编译器 计算机视觉
Ubuntu 20.04环境下无法找到#include<opencv/cv.h>文件 - 解决方案。
希望这些信息能帮助你解决遇到的问题。
455 10
二叉树详解(深度优先遍历、前序,中序,后序、广度优先遍历、二叉树所有节点的个数、叶节点的个数)
二叉树详解(深度优先遍历、前序,中序,后序、广度优先遍历、二叉树所有节点的个数、叶节点的个数)
|
Linux API 调度
xenomai内核解析-xenomai实时线程创建流程
本文介绍了linux硬实时操作系统xenomai pthread_creta()接口的底层实现原理,解释了如何在双内核间创建和调度一个xenomai任务。本文是基于源代码的分析,提供了详细的流程和注释,同时给出了结论部分,方便读者快速了解核心内容。
647 0
xenomai内核解析-xenomai实时线程创建流程
|
JSON API 数据处理
掌握 JSON 到表格转换:全面指南
本文探讨了将JSON转换为表格格式(如CSV、Excel)的方法,助力高效数据处理与可视化。内容涵盖Python(Pandas库)、在线工具、Excel/Google Sheets、命令行工具(jq/csvkit)及数据库等多种方式,并分析了转换中的挑战与最佳实践。此外,还介绍了Apipost在API开发测试中的应用,帮助优化数据处理流程,提升开发效率。适合不同技术水平的用户学习参考。
1486 13
|
存储 Java 编译器
Java 中 .length 的使用方法:深入理解 Java 数据结构中的长度获取机制
本文深入解析了 Java 中 `.length` 的使用方法及其在不同数据结构中的应用。对于数组,通过 `.length` 属性获取元素数量;字符串则使用 `.length()` 方法计算字符数;集合类如 `ArrayList` 采用 `.size()` 方法统计元素个数。此外,基本数据类型和包装类不支持长度属性。掌握这些区别,有助于开发者避免常见错误,提升代码质量。
1146 1
|
存储 前端开发 C++
C++ 多线程之带返回值的线程处理函数
这篇文章介绍了在C++中使用`async`函数、`packaged_task`和`promise`三种方法来创建带返回值的线程处理函数。
891 6
|
存储 编解码 编译器
FFmpeg 7.0 正式登场:全新 VVC 解码器
【4月更文挑战第9天】最新版本的流行视频处理软件FFmpeg 7.0,代号为“Dijkstra”,已正式发布。
744 0