В то время, когда вы излучаете самую первую строку,
Artist Title Price Genre Disc Sale Tax Cash
Чтобы достичь «выравнивания», вы должны «заранее» знать, насколько широким должен быть каждый столбец (в противном случае выравнивание невозможно). Как только вы do узнаете необходимую ширину для каждого столбца (есть несколько возможных способов добиться этого в зависимости от того, откуда поступают ваши данные), тогда поможет функция setw
, упомянутая в другом ответе, или ( более грубо ;-) вы могли бы выбросить тщательно вычисленное количество лишних пробелов (неуклюже, чтобы быть уверенным) и т. д. Я не рекомендую вкладки в любом случае, так как вы не имеете никакого реального контроля над тем, как конечное устройство вывода будет отображать их вообще.
Возвращаясь к основной проблеме, если у вас есть значение каждого столбца в vector<T>
, например, вы можете выполнить первый этап форматирования, чтобы определить максимальную ширину столбца, например (обязательно с учетом ширины заголовка для столбца тоже конечно).
Если ваши строки поступают «одна за другой», и выравнивание имеет решающее значение, вам придется кэшировать или буферизовать строки по мере их поступления (в память, если они уместятся, в противном случае в файл на диске, который вы позже) «перемотать» и перечитать с самого начала), стараясь обновлять вектор «максимальной ширины каждого столбца» по мере появления строк. Вы не можете ничего выводить (даже заголовки!), Если важно сохранить выравнивание, пока вы не увидите самую последнюю строку (если, конечно, каким-то волшебным образом не обладаете предыдущим знанием ширины столбцов; -).