C++和表格格式打印

lnlaulya  于 2023-01-10  发布在  其他
关注(0)|答案(3)|浏览(223)

我正在寻找如何在C++打印,使表列宽是固定的。目前我已经做了使用空格和|-,但只要数字去两位数所有的对齐变坏。

|---------|------------|-----------|
| NODE    |   ORDER    |   PARENT  |
|---------|------------|-----------|
|  0      |     0      |           |
|---------|------------|-----------|
|  1      |     7      |     7     |
|---------|------------|-----------|
|  2      |     1      |     0     |
|---------|------------|-----------|
|  3      |     5      |     5     |
|---------|------------|-----------|
|  4      |     3      |     6     |
|---------|------------|-----------|
|  5      |     4      |     4     |
|---------|------------|-----------|
|  6      |     2      |     2     |
|---------|------------|-----------|
|  7      |     6      |     4     |
|---------|------------|-----------|
uqzxnwby

uqzxnwby1#

可以将std::setw操纵器用于cout。
还有一个std::setfill用于指定填充符,但默认为空格。
如果你想把值居中,你必须做一些计算。我建议把值右对齐,因为它们是数字(这样更容易)。

cout << '|' << setw(10) << value << '|' setw(10) << value2 << '|' << endl;

不要忘记包括<iomanip>
将它 Package 成一个通用的表格式化程序函数不会太麻烦,但我将把它留给读者作为练习:)

cdmah0mi

cdmah0mi2#

你可以使用beautiful printf()。我发现它比cout更容易和更好的格式化。
示例:

int main()
{
    printf ("Right align: %7d:)\n", 5);
    printf ("Left align : %-7d:)\n", 5);

    return 0;
}
rvpgvaaj

rvpgvaaj3#

既然我们已经有了C++  std::coutprintf()的答案,那么不妨给予C++20  std::format的答案。

std::cout << std::format( "|{:^9}|{:^9}|{:^9}|\n", node, order, parent );

OP,你的列宽都是不同的大小。这里我把它们都做成了9。另外,水平线并不能真正增加可读性,但是它们占用了很多空间。我个人会把它们去掉。

| NODE    | ORDER   | PARENT  |
|   11    |    7    |    3    |
|   12    |    5    |   11    |

std::format这样格式化东西真的很容易。一定要看看the documentation
对了,别忘了:

#include <format>
#include <iostream>

相关问题