Первая вещь, которая прибывает по моему мнению, состоит в том, чтобы сделать набор \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
Что еще я должен был бы сделать?
Править: Таким образом, я получаю это, я должен сначала считать максимальную ширину каждого столбца, который я хочу отображенный, и затем добавляющий дополняющие пробелы соответственно. Но как, и с тем, какие функции, я могу пойти о выполнении этого? Я должен просто считать количество символов в строке и затем пойти оттуда?
Используйте 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
Используйте форматирование строки (из стандартного ввода-вывода) для отображения каждой строки.
http://www.cppreference.com/wiki/c/io/printf
Это позволит вам установить минимальную ширину поля и таким образом заполнит остальную часть каждого поля за вас.
Для подобных ситуаций обычно требуется два прохода: один для определения максимальной ширины каждого столбца, а другой - для печати. Для стандартных iostreams вы можете использовать подпрограмму width ()
, чтобы iostream обрабатывал заполнение автоматически.
Вы также должны принять во внимание, что разные редакторы / программы просмотра показывают текст с разной шириной табуляции. Таким образом, при использовании вкладок текст, который выглядит хорошо организованным в одном средстве просмотра, может выглядеть некрасиво в другом.
Если вы действительно хотите создать красивую компоновку, вы можете использовать пробелы для заполнения и сделать два прохода для текста: сначала подсчитайте максимальную ширину каждого столбца, затем добавьте нужное количество пробелов для заполнения в каждый столбец. Для последнего вы также можете использовать специальный вызов printf
.
Обновление: Подсчет ширины столбца в основном означает подсчет длины строк в данном столбце. Это можно сделать с помощью string :: length ()
или strlen ()
, в зависимости от того, используете ли вы std :: string
или char *
(рекомендуется первое). Затем вы просто перебираете все слова в этом столбце, сравниваете максимальную длину слова, которая у вас есть на данный момент, и, если текущее слово длиннее, вы устанавливаете эту длину как новый максимум. Если вы храните свои слова в контейнере STL, вы даже можете использовать алгоритм std :: max_element
, чтобы выполнить эту работу за вас с помощью одного вызова функции.
Используйте заполнение 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