C++通过cout输出左对齐/右对齐文本
内容
在 C++ 中使用 std::cout
控制对齐方式和填充字符时,需借助 <iomanip>
头文件中的流操作符。以下是详细解决方案:
1. 基础操作符
操作符/函数 | 作用 | 示例 |
---|---|---|
std::setw(n) |
设置字段宽度为 n 字符 |
cout << setw(10); |
std::left |
左对齐(默认右对齐) | cout << left; |
std::right |
右对齐(默认数值右对齐) | cout << right; |
std::setfill(c) |
设置填充字符为 c |
cout << setfill('*'); |
2. 左对齐 + 自定义填充
#include <iostream>
#include <iomanip> // 必须包含此头文件int main() {int value = 42;std::string text = "Hello";// 左对齐,宽度 10,填充字符 '-'std::cout << std::left << std::setfill('-');std::cout << std::setw(10) << value << "\n"; // 输出:42--------std::cout << std::setw(10) << text << "\n"; // 输出:Hello-----return 0;
}
3. 右对齐 + 自定义填充
#include <iostream>
#include <iomanip>int main() {double price = 99.95;std::string code = "A1";// 右对齐,宽度 8,填充字符 '.'std::cout << std::right << std::setfill('.');std::cout << std::setw(8) << price << "\n"; // 输出:..99.95std::cout << std::setw(8) << code << "\n"; // 输出:.....A1return 0;
}
4. 混合对齐与填充
#include <iostream>
#include <iomanip>int main() {// 左对齐 + 填充 '*'std::cout << std::left << std::setfill('*');std::cout << std::setw(6) << "ID" << "|"; // 输出:ID****|// 右对齐 + 填充 '0'std::cout << std::right << std::setfill('0');std::cout << std::setw(5) << 7 << "\n"; // 输出:ID****|00007return 0;
}
5. 重要注意事项
-
作用域:
std::left
/std::right
和std::setfill
是持久性设置,直到被修改。std::setw(n)
仅对下一次输出有效。
-
默认行为:
- 字符串:默认左对齐
- 数值:默认右对齐
-
字段宽度不足:
- 若数据长度超过
setw(n)
的n
,完整输出数据,不截断。
- 若数据长度超过
6. 完整示例
#include <iostream>
#include <iomanip>int main() {// 表头std::cout << std::left << std::setfill(' ');std::cout << std::setw(15) << "Product"<< std::setw(10) << "Price"<< std::setw(8) << "Stock" << "\n";// 分隔线std::cout << std::setfill('-') << std::setw(33) << "" << "\n";std::cout << std::setfill(' ');// 数据行std::cout << std::left << std::setw(15) << "Apple"<< std::right << std::setw(10) << "$1.99"<< std::setw(8) << 100 << "\n";std::cout << std::left << std::setw(15) << "Banana"<< std::right << std::setw(10) << "$0.99"<< std::setw(8) << 250 << "\n";return 0;
}
输出效果:
Product Price Stock
---------------------------------
Apple $1.99 100
Banana $0.99 250
通过组合这些操作符,可以灵活控制输出的对齐方式和填充字符,满足表格、报表等格式化需求。