Как я правильно организую вывод в столбцы?

Первая вещь, которая прибывает по моему мнению, состоит в том, чтобы сделать набор \t, но это заставило бы слова быть неправильно выровненными, если какое-либо слово дольше, чем какое-либо другое слово несколькими символами.

Например, я хотел бы иметь что-то как:

Name    Last Name            Middle initial
Bob     Jones                M
Joe     ReallyLongLastName   T

Вместо этого включением только "\t" в моем операторе суда мне может только удаться добраться

Name    Last Name            Middle initial
Bob     Jones                M
Joe     ReallyLongLastName                T

или

Name    Last Name            Middle initial
Bob     Jones    M
Joe     ReallyLongLastName   T

Что еще я должен был бы сделать?

Править: Таким образом, я получаю это, я должен сначала считать максимальную ширину каждого столбца, который я хочу отображенный, и затем добавляющий дополняющие пробелы соответственно. Но как, и с тем, какие функции, я могу пойти о выполнении этого? Я должен просто считать количество символов в строке и затем пойти оттуда?

25
задан wrongusername 12 March 2010 в 21:37
поделиться

5 ответов

Используйте std :: setw из

например.

using std::cout;
using std::setw;

cout << setw(10) << "This" <<
        setw(10) << "is" <<
        setw(10) << "a" <<
        setw(10) << "test" << '\n';

Вывод:

      This        is         a      test
30
ответ дан 28 November 2019 в 21:03
поделиться

Используйте форматирование строки (из стандартного ввода-вывода) для отображения каждой строки.

http://www.cppreference.com/wiki/c/io/printf

Это позволит вам установить минимальную ширину поля и таким образом заполнит остальную часть каждого поля за вас.

0
ответ дан 28 November 2019 в 21:03
поделиться

Для подобных ситуаций обычно требуется два прохода: один для определения максимальной ширины каждого столбца, а другой - для печати. Для стандартных iostreams вы можете использовать подпрограмму width () , чтобы iostream обрабатывал заполнение автоматически.

2
ответ дан 28 November 2019 в 21:03
поделиться

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

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

Обновление: Подсчет ширины столбца в основном означает подсчет длины строк в данном столбце. Это можно сделать с помощью string :: length () или strlen () , в зависимости от того, используете ли вы std :: string или char * (рекомендуется первое). Затем вы просто перебираете все слова в этом столбце, сравниваете максимальную длину слова, которая у вас есть на данный момент, и, если текущее слово длиннее, вы устанавливаете эту длину как новый максимум. Если вы храните свои слова в контейнере STL, вы даже можете использовать алгоритм std :: max_element , чтобы выполнить эту работу за вас с помощью одного вызова функции.

7
ответ дан 28 November 2019 в 21:03
поделиться

Используйте заполнение printf () с флагом минус для выравнивания по левому краю

 printf("%-8s%-21s%-7s%-6s\n", "Name", "Last Name", "Middle", "initial");
 printf("%-8s%-21s%-7s%-6s\n", "Bob", "Jones", "M", "");
 printf("%-8s%-21s%-7s%-6s\n", "Joe", "ReallyLongLastName", "T", "");

, что дает:

Name    Last Name            Middle initial
Bob     Jones                M
Joe     ReallyLongLastName   T
6
ответ дан 28 November 2019 в 21:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: