C++中使用cout对齐文本和设置字段宽度
使用流类时,可指定为您执行特定操作的控制符( manipulator)。 std::endl 就是一个这样的控制符,
您一直在使用它来插入换行符:
std::cout << “This lines ends here” << std::endl;
表 27.2 列出了其他几个控制符和标志
类/对象 用途
输出控制符
endl 插入一个换行符
ends 插入一个空字符
基数控制符
dec 让流以十进制方式解释输入或显示输出
hex 让流以十六进制方式解释输入或显示输出
oct 让流以八进制方式解释输入或显示输出
浮点数表示控制符
fixed 让流以定点表示法显示数据
scientific 让流以科学表示法显示数据
控制符
setprecision 设置小数精度
setw 设置字段宽度
setfill 设置填充字符
setbase 设置基数,与使用 dec、 hex 或 oct 等效
setiosflag 通过类型为 std::ios_base::fmtflags 的掩码输入参数设置标志
resetiosflag 将 std::ios_base::fmtflags 参数指定的标志重置为默认值
可使用 setw( )控制符来设置字段宽度,插入到流中的内容将在指定宽度内右对齐。在这种情况下,
还可使用 setfill( )指定使用什么字符来填充空白区域,如程序清单 27.3 所示。
程序清单 27.3 使用控制符 setw( )设置字段宽度,并使用 setfill( )指定填充字符
0: #include <iostream>
1: #include <iomanip>
2: using namespace std;
3:
4: int main()
5: {
6: cout << "Hey - default!" << endl;
7:
8: cout << setw(35); // set field width to 25 columns
9: cout << "Hey - right aligned!" << endl;
10:
11: cout << setw(35) << setfill('*');
12: cout << "Hey - right aligned!" << endl;
13:
14: cout << "Hey - back to default!" << endl;
15:
16: return 0;
17: }
输出:
Hey - default!
Hey - right aligned!
***************Hey - right aligned!
Hey - back to default!
分析:
第 8 行使用了 setw(35),而第 11 行使用了 setw(35)和 setfill(‘*’),输出说明了这样做的效果。从输
出可知,第 11 行导致使用 setfill( )指定的星号来填充文本前的空白区域