如何缩进cout输出?

16

我想要打印二叉树。

void print_tree(Node * root,int level )
 {
    if (root!=NULL)  
    {  
        cout<< root->value << endl;
    }
    //...
}

我该如何缩进输出以便用“-”字符为每个值添加缩进级别。

3个回答

32
您可以构建一个包含重复字符次数的字符串:
std::cout << std::string(level, '-') << root->value << std::endl;

1
@Aviraldg - 请仔细阅读问题。缩进应由“-”字符组成。 - Daniel Earwicker
12
请不要使用'\t'。在大多数控制台上,它会呈现为8个空格的制表符,太宽了。 - Matthew Scharley
要实现比制表符更宽的缩进,但不是太宽,只需将级别乘以所需的宽度即可 std::string(level*2, ' ') - phuclv

2

cout 有特殊字符,以下是两个:

'\t' - tab
'\n' - new line

希望这有所帮助。

1
你也可以使用列缩进,并考虑第一列的大小,然后是第二列大小等等。你可以找到每列中最长的名称,然后使用填充和对齐方式为该列中所有项目设置宽度。你可以首先搜索项目大小,然后选择宽度来动态地完成它,或者你可以像下面这样静态地完成它:
#include <iomanip>
#include <iostream>
#include <sstream>

void print_some()
{
    using namespace std;
    stringstream ss;
    ss << left << setw(12) << "id: " << tank_name << '\n';
    ss << left << setw(12) << "texture: " << texture_name << '\n';
    ss << left << setw(12) << "uv_rect: ";
    // clang-format off
    ss << left <<setprecision(3) << fixed
       << setw(7) << r.pos.x << ' '
       << setw(7) << r.pos.y << ' '
       << setw(7) << r.size.x << ' '
       << setw(7) << r.size.y << '\n';
    // clang-format on
    ss << left << setw(12) << "world_pos: " << pos.x << ' ' << pos.y << '\n';
    ss << left << setw(12) << "size: " << size.x << ' ' << size.y << '\n';
    ss << left << setw(12) << "angle: " << angle << '\n';
}

输出可能看起来像这样:

id:         tank_spr
texture:    tank.png
uv_rect:    0.300   0.500   0.500   0.500  
world_pos:  0.123 0.123
size:       1.000 0.300
angle:      270.000

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接