разделить строку текста

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

Ввод: Привет, это очень длинная очередь.

Вывод:
Здравствуйте, это
действительно
длинная строка.

Вход: a b c d e f

Вывод:
a b c
d e f

Ввод: Это действительно такая длинная линия. Это конец.

Вывод:
Это действительно такая
лооооооооооооооооооооооооооооохх
строка Это конец.

Как видите, в приведенных выше примерах строка ввода укладывается в широкий прямоугольник. Но выход более-менее укладывается в квадратную форму.

По сути, здесь нужно просто подсчитать количество символов в строке и извлечь из этого числа квадратный корень. Затем введите квадратный корень из числа символов в каждой строке. Но в приведенном выше примере разделение должно выполняться с учетом переноса слов вместо символов. Есть ли какой-то стандартный алгоритм для этого? Буду признателен за любые примеры/указатели кода!


person plys    schedule 15.05.2010    source источник
comment
квадрат это прямоугольник.   -  person Pete Kirkham    schedule 15.05.2010
comment
Но не все прямоугольники квадраты ;-). Во всяком случае, отредактировал мой вопрос сейчас. Надеюсь понятно :-).   -  person plys    schedule 15.05.2010


Ответы (1)


Как вы заметили, это в основном означает разбиение строк с минимальной и максимальной шириной, а не просто с максимальной шириной, что обычно и делается. (И ваш пример показывает, что это не всегда возможно, если вы не можете расставлять слова через дефис.) TeX может это сделать (посмотрите на команду \parshape): его алгоритм разрыва строки поддерживает произвольные формы (и переносы тоже) и считается современным. Поэтому, если вы хотите серьезно создавать квадраты, вам обязательно следует адаптировать алгоритм Кнута/Пласса (http://defoe.sourceforge.net/folio/knuth-plass.html).

person Kilian Foth    schedule 15.05.2010