在C++程序开发中,控制输出内容的宽度和填充字符是格式化输出的常见需求,比如输出表格时让各列对齐、输出编号时固定位数不足补零等场景都需要用到相关功能。C++的
setw和setfill的基本作用
setw是设置输出宽度的流操纵符,它的作用是规定下一次输出操作的最小字段宽度。如果实际输出的内容长度小于设置的宽度,就会用默认的填充字符(空格)补齐;如果实际长度大于等于设置的宽度,则按照实际内容输出,不会截断。
setfill是设置填充字符的流操纵符,用来指定当输出内容长度不足setw设置的宽度时,用来补齐的字符,默认填充字符是空格。需要注意的是,setfill的设置是持久的,会一直生效直到被重新设置。
基础使用示例
首先需要在代码中引入
#include <iostream>
#include <iomanip> // 引入setw和setfill所在的头文件
using namespace std;
int main() {
// 设置输出宽度为10,填充字符为*
cout << setw(10) << setfill('*') << 123 << endl;
// 此时填充字符已经被设置为*,后续输出如果宽度不足会继续用*填充
cout << setw(10) << 45 << endl;
// 重新设置填充字符为空格
cout << setfill(' ') << setw(10) << 67 << endl;
return 0;
}
上述代码的输出结果如下:
*******123
*******45
67
常见使用场景
场景1:数字补零输出
输出编号、日期等场景时,经常需要固定位数不足补零,比如输出3位的编号,不足3位前面补0:
#include <iostream>
#include <iomanip>
using namespace std;
int main() {
int num1 = 5;
int num2 = 12;
int num3 = 123;
// 设置宽度为3,填充字符为0
cout << setw(3) << setfill('0') << num1 << endl;
cout << setw(3) << setfill('0') << num2 << endl;
cout << setw(3) << setfill('0') << num3 << endl;
return 0;
}
输出结果为:
005 012 123
场景2:表格对齐输出
输出多列数据时,通过设置统一的宽度和填充字符,可以让表格看起来更整齐:
#include <iostream>
#include <iomanip>
using namespace std;
int main() {
// 设置填充字符为空格,第一列宽度10,第二列宽度8
cout << setfill(' ');
cout << setw(10) << "姓名" << setw(8) << "年龄" << endl;
cout << setw(10) << "张三" << setw(8) << 20 << endl;
cout << setw(10) << "李四" << setw(8) << 25 << endl;
cout << setw(10) << "王小明" << setw(8) << 22 << endl;
return 0;
}
输出结果为:
姓名 年龄
张三 20
李四 25
王小明 22
使用注意事项
setw的设置是临时的,只对下一次输出操作生效,每次需要固定宽度都需要重新调用setw。setfill的设置是持久的,一旦设置会一直生效,直到被新的setfill调用覆盖。setw的参数必须是正整数,如果设置为0或者负数,相当于没有设置宽度限制。- 如果输出的是字符串,宽度计算的是字符的个数,中文在部分环境下可能占两个字符宽度,需要根据实际情况调整宽度值。
小结
通过setw和setfill的组合使用,我们可以轻松控制C++输出内容的宽度和填充字符,满足各种格式化输出的需求。记住setw临时生效、setfill持久生效的特点,就能避免很多使用中的小问题。多结合实际场景练习,很快就能熟练运用这两个工具。