开发者

C++ and table format printing

开发者 https://www.devze.com 2023-01-19 00:39 出处:网络
I am looking for how to print in C++ so that table column width is fixed. currently I have done using spaces and | and -, but as soon as number goes to double digit all the alignment goes bad.

I am looking for how to print in C++ so that table column width is fixed. currently I have done using spaces and | and -, but as soon as number goes to double digit all the alignment goes bad.

|---------|------------|-----------|
| 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     |
|---------|------------|-----------|


You can use the std::setw manipulator for cout.

There's also a std::setfill to specify the filler, but it defaults to spaces.

If you want to center the values, you'll have to do a bit of calculations. I'd suggest right aligning the values because they are numbers (and it's easier).

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

Don't forget to include <iomanip>.

It wouldn't be much trouble to wrap this into a general table formatter function, but I'll leave that as an exercise for the reader :)


You can use the beautiful printf(). I find it easier & nicer for formatting than cout.

Examples:

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

    return 0;
}


Might as well give the C++20 std::format answer, since we already have the C++ std::cout and C printf() answers.

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

OP, your column widths are all different sizes. Here I made them all 9. Also, horizontal lines don’t really increase legibility, but they use up a lot of space. I would personally get rid of them.

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

Formatting stuff this way is really easy with std::format. Be sure to check out the documentation.

Oh yeah, don’t forget to:

#include <format>
#include <iostream>
0

精彩评论

暂无评论...
验证码 换一张
取 消