如何在一个 setw 中包含两个 >> 调用?

How to include two calls of >> in one setw?

举一个最小的工作示例

#include <iostream>
#include <iomanip>
using namespace std;
int main()
{

    cout    << setw(10) << "aaaaaaa"
            << setw(10) << "bbbb"
            << setw(10) << "ccc"
            << setw(10) << "ddd"
            << setw(10) << endl; 

    for(int i(0); i < 5; ++i){

        char ch = ' ';
        if ( i == 0 )
            ch = '%';
        cout << setw(10) << i
             << setw(10) << i << ch
             << setw(10) << i
             << setw(10) << i
             << setw(10) << endl;
    }
    return 0;
}

输出为

   aaaaaaa      bbbb       ccc       ddd
         0         0%         0         0
         1         1          1         1
         2         2          2         2
         3         3          3         3
         4         4          4         4

我想做的是将 << i << ch 包含在 setw(10) 的一个字段中,以便正确对齐列。

可能将 ich 组合在一个字符串中,setw 本身不会接受这种行为

试试这个片段

 cout << setw(10) << i
      << setw(10) << std::to_string(i) + ch;

您需要将它们连接成一个字符串,如下所示:

#include <string>
cout << setw(10) << std::to_string(i) + ch;

一般。

但是如果您知道 i 是一个字符,您可以使用:

cout << setw(9) << i << ch;

这可能适合你,因为 i 似乎是 ' ''%'

我不确定你的需求。

您可以使用一些 std::ostringstream,例如

 std::ostringstream os;
 os << i << ch << std::flush;
 std::cout << setw(10) << os.str();

您可以构建一个字符串,例如

由于我们正在查看 ' ''%',您可以简单地进行静态计算。

cout << setw(10) << i
     << setw( 9) << i << ch
     << setw(10) << i
     << setw(10) << i
     << setw(10) << endl;