C++通过cout输出左对齐/右对齐文本

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.95
    std::cout << std::setw(8) << code << "\n";    // 输出:.....A1

    return 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****|00007

    return 0;
}

5. 重要注意事项

  1. 作用域

    • std::left/std::rightstd::setfill 是持久性设置,直到被修改。
    • std::setw(n) 仅对下一次输出有效。
  2. 默认行为

    • 字符串:默认左对齐
    • 数值:默认右对齐
  3. 字段宽度不足

    • 若数据长度超过 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

通过组合这些操作符,可以灵活控制输出的对齐方式和填充字符,满足表格、报表等格式化需求。

posted @ 2025-03-11 23:21  Gold_stein  阅读(731)  评论(0)    收藏  举报