Ю12.2

Текст, сформированный построчно, выровнять по правому краю так, чтобы каждая строка заканчивалась знаком препинания или одним пробелом. Выравнивание осуществить, вставляя дополнительные пробелы между словами(равномерно по всей строке).

Текст
There are many big and small libraries everywhere in our country.
They have millions of books in different languages.
Every school has a library.
Pupils come to the library to take books on different subjects.
Результат

Код программы:

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

Алгоритм:

Описываем и считываем строки. Затем описываем количество пробелов в строке и длину самой длинной строки (относительно которой и будет производится выравнивание по правому краю).

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

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

Затем второй проход строк.

Резервируем длину строки, так как она сейчас будет изменяться, а нам нужно при вычислениях учитывать исходные данные. Проходим все символы строки и если это пробел (конечно же, не учитывая заключающий пробел), то вставляем нужное количество пробелов между строк (так чтобы их было равное количество).

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

Для проверки работы программы можно воспользоваться объектом.

 

Зелінський Вячеслав Олександрович
Зелінський Вячеслав Олександрович

Latest posts by Зелінський Вячеслав Олександрович (see all)

3 thoughts on “Ю12.2

  1. Вы не могли не видеть как эту задачу решает, например, Microsoft Word. Можно было понаблюдать за ним. Выяснилось бы, что:
    — Перевод строки во входном потоке означает конец абзаца.
    — Если во входном потоке много строк, то столько же будет и абзацев.
    — Если очередное слово абзаца не помещается в строке распечатки, то слово переносится на новую строку.
    — Пробелы добавляются для выравнивания всех строк абзаца кроме последней.
    Количество символов в стоке распечатки лучше вводить из стандартного потока.

    Вставлять пробелы в начало строки неправильно.

Добавить комментарий