Как я могу сделать отступ для вывода cout? - PullRequest
13 голосов
/ 11 октября 2009

Я пытаюсь распечатать двоичное дерево

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

Как сделать отступ для выходных данных, чтобы отступать каждое значение с помощью символов уровня '-'.

Ответы [ 3 ]

27 голосов
/ 11 октября 2009

Вы можете создать строку, содержащую количество повторений символа:

std::cout << std::string(level, '-') << root->value << std::endl;
0 голосов
/ 23 марта 2019

Вы также можете делать отступы для столбцов и думать о первом размере столбца, затем о втором размере столбца и т. Д. Вы можете найти самое длинное имя в каждом столбце, а затем установить ширину для всех элементов в этом столбце с отступом и выровнять по своему желанию. Вы можете сделать это динамически, сначала найти размер элементов, затем выбрать ширину, или вы можете сделать это статически, например:

#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
0 голосов
/ 15 октября 2009

cout имеет специальные символы, ниже два:

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

Надеюсь, это помогло.

...