Сколько пробелов для символа табуляции (\ t)?

Я хочу реализовать функцию рисования текста. Но я не уверен, как работает \t, что означает, что я не знаю, сколько пробелов я должен распечатать для \t.

Я придумал следующий алгоритм:

a) Каждый \t представляет не более NUMBER_OF_SPACES_FOR_TAB пробелы. b) Если \t появляется в последней строке в соответствующей позиции, \t для этой строки следует выровнять по \t последней строки.

Пример:

printf("a\t\tb\n");
printf("\t\tc\n");

Должен печатать:

a11112222b
34444c

Где:

1.Number i представляет пробелы \t в позиции i

2. NUMBER_OF_SPACES_FOR_TAB == 4

Кто-нибудь знает стандартный алгоритм? Спасибо заранее.

Ответ 1

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

Я ожидаю, что ваш вывод будет выглядеть следующим образом:

123456789
a       b
        c

Алгоритм должен начинать отсчет столбца в ноль, а затем увеличивать его для каждого вывода символа. Когда вы переходите на вкладку, выведите n-(c%n) пробелы, где c - номер столбца (основанный на нуле), а n - промежуток между вкладками.

Изменить: формула, которую я изначально ошибался уже более года, никто меня не вызывал. Сожалею. Теперь он исправлен.

Ответ 2

Представьте себе линейку с табуляторами каждые 8 ​​пробелов. Символ табуляции выравнивает текст до следующей остановки табуляции.

                                0       8       16      24      32      40
                                |.......|.......|.......|.......|.......|
printf("\tbar\n");              \t      bar
printf("foo\tbar\n");           foo\t   bar
printf("longerfoo\tbar");       longerfoo\t     bar

Чтобы вычислить, где находится следующая табуляция, возьмите текущий column.

nextTabStop = (column + 8) / 8 * 8

Часть / 8 * 8 эффективно усекает результат до ближайшего кратного 8. Например, если вы находитесь в столбце 11, то (11 + 8) равно 19, а 19/8 равно 2, а 2 * 8 - 16. Итак, следующая остановка табуляции из столбца 11 находится в столбце 16.

В текстовом редакторе вы можете настроить табуляцию на меньшие интервалы, например, каждые 4 пробела. Если вы имитируете, какие вкладки выглядят на терминале, вы должны придерживаться 8 пробелов на вкладку.

Ответ 3

Символ "Tab" переходит на следующую вкладку. По умолчанию, есть одно каждые 8 ​​пробелов. Но в большинстве оболочек вы можете легко отредактировать его как любое количество пробелов (предпочтения профиля в Linux, установить tabstop в vim).