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>
精彩评论