如何将 std::setw() 与数组输出一起使用?

How can you use std::setw() with array output?

我正在用 C++ 制作一个 21 点游戏,我试图打印出玩家和庄家的牌以及他们的总和、资本等。但是,在打印卡片矢量时,我 运行 遇到了 std::setw() 的问题。这是一个代码片段:

    int width = 18;
    std::cout << std::left << std::setw(width) << "Your cards:";
    std::cout << std::left << std::setw(width * 2) << "arr";
    std::cout << std::left << std::setw(width) << "Dealers cards:";
    std::cout << "arr2" << std::endl;

    std::cout << std::left << std::setw(width) << "Your sum:";
    std::cout << std::left << std::setw(width*2) << player.sum();
    std::cout << std::left << std::setw(width) << "Dealers sum:";
    std::cout << dealer.sum() << std::endl;

arrarr2 应该有像 5 2 6 1 这样的数字值,但是如果我分别打印每个元素,则对齐会中断。我认为 setw() 需要是一个块或一个字符串才能工作,否则一旦值发生变化,垂直对齐就会混乱。我尝试 myString.push_back() 为每个矢量值然后打印它,但没有运气。我假设我需要找到一种方法将字符串打印到一个元素中。

它应该是这样的:

Your cards:     5 7 1 2                 Dealers cards:     2 1 7 5
Your sum:       21                      Dealers sum:       21
Your capital:   100                     Dealers capital:   100

我找到了解决办法。您可以使用 stringstream 将 int 值添加到字符串而不会出现转换错误,这就是我修复代码的方式:

#include <sstream>
std::stringstream playerCards{};

for (int i{}; i < player.cards.size(); i++) {
    playerCards << player.cards[i] << " ";
}

int width = 18;
std::cout << std::left << std::setw(width) << "Your cards:";
std::cout << std::left << std::setw(width * 2) << playerCards.str();

这样数组将被放入一个字符串中并计为一个块,这正是我一直在寻找的。