首页 理论教育 C++STL精讲:字段宽度、填充字符和位置调整

C++STL精讲:字段宽度、填充字符和位置调整

时间:2023-10-25 理论教育 版权反馈
【摘要】:本小节将详细讲解如何使用格式化中的字段宽度、填充字符和位置调整。调用该函数时,若无参数,该函数返回当前字段宽度;若传入一个整数,则会改变字段宽度为该整数宽度,并返回当前宽度。字段宽度的最小默认值是0。标准化之前,面对单个字符,忽略字段宽度,直至下一次多字符格式化输出时才使用。

C++STL精讲:字段宽度、填充字符和位置调整

7.3.1节讲述了各种格式标识和操作符。本小节将详细讲解如何使用格式化中的字段宽度、填充字符和位置调整。

1.字段宽度

width()函数用来定义字段宽度。其原型包括两种:有参数和无参数。

978-7-111-51399-5-Chapter07-48.jpg

对于输出而言,width()函数定义了最小字段,此设置用于下一次格式化输出。调用该函数时,若无参数,该函数返回当前字段宽度;若传入一个整数,则会改变字段宽度为该整数宽度,并返回当前宽度。字段宽度的最小默认值是0。该函数的作用仅限于“下一次”格式化输出。

setw()函数同样可以为输出的数值设置字段宽度,其功能相当于width()。其原型为:

978-7-111-51399-5-Chapter07-49.jpg

setw()函数还可以将设置字段宽度命令插入输出流和输入流中,比单独调用格式化函数更加方便。当需要显示的数值比设置的字段宽度大时,将显示整个数据值,这有可能会影响后面的数据输出或者后面输出的数据格式。

值得一提的是,当在输入流中设置字段宽度时,若使用字符数组和字符型指针,尤其是字符型指针,则不能用函数sizeof(char)来计算该字符型数组的字符数目。例如,

正确:

978-7-111-51399-5-Chapter07-50.jpg

错误

978-7-111-51399-5-Chapter07-51.jpg

若使用string类型,则不会有以上麻烦。例如,

正确:

978-7-111-51399-5-Chapter07-52.jpg

2.填充字段

fill()函数定义用来填充“格式化表述”和最小字段之间的填充字符。默认的填充字符是空格符。(www.xing528.com)

978-7-111-51399-5-Chapter07-53.jpg

setfill()函数同样可以定义填充字符,其作用相当于fill()函数。例如,

978-7-111-51399-5-Chapter07-54.jpg

再如,

978-7-111-51399-5-Chapter07-55.jpg

3.格式化中的位置

输入和输出中的字段位置一般是指字段的左对齐、右对齐和“符号靠左对齐,数值靠右对齐”。标识left代表靠左对齐;标识right代表靠右对齐;标识internal代表符号靠左对齐,数值靠右对齐;none是默认的靠右对齐。使用字段位置时,如果输出数值或字符所占宽度小于设置的字段宽度,其余位置需要由特定字符填充。

单一字符的对齐方式在标准化过程中发生变化。标准化之前,面对单个字符,忽略字段宽度,直至下一次多字符格式化输出时才使用。在输入和输出时,设置字段位置有两种方法:setf()和unsetf();或者setiosflag()和resetiosflags()。setf()和unsetf()函数的原型为:

978-7-111-51399-5-Chapter07-56.jpg

或者

978-7-111-51399-5-Chapter07-57.jpg

以上函数均包含在头文件<iomanip>和<iostream>中。

例7-6

978-7-111-51399-5-Chapter07-58.jpg

例7-6的执行效果如图7-3所示。

978-7-111-51399-5-Chapter07-59.jpg

图7-3 例7-6的执行效果

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈