Сколько пробелов для символа табуляции (\ 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).