Форматирование строки -размещение ее в выходном массиве заданной размерности таким образом, чтобы интервалы между соседними словами отличались не более, чем на 1.
Шаг 1: Исходные данные и результат. Входная строка произвольной длины в массиве IN[], отформатированная строка длины n в массиве OUT[]. Выходная строка отвечает следующим требованиям:
-слово -любая последовательность символов, кроме пробела ;
-после форматирования число пробелов между словами различается не более чем на 1; -первое и последнее слово расположены по краям строки. Шаг 2: Форматирование включает в себя последовательность из трех действий:
void format(char IN[], char OUT[], int n)
{
// Собрать исходные данные по строке,
// необходимые для форматирования;
// Проверить возможность форматирования;
// Разместить слова в выходной строке.
}
Шаг 3: Данные по строке, необходимые для форматирования: -количество слов в строке -nw; -общее количество символов во всех словах -ns; -стандартное количество пробелов между словами при форматировании -np; -оставшееся количество пробелов, добавляемых по одному между словами -nr. На этом шаге детализируется проверка возможности форматирования и определяются взаимосвязанные параметры.
void format(char IN[], char OUT[], int n)
{ int nw, ns, np, nr;
// Определение nw, ns ...
OUT[0] = '\0';
if (nw < 2) return; // Мало слов в строке
np = (n - ns) / (nw - 1);
if (np <= 0) return; // Много символов в словах
nr = (n - ns) % (nw - 1); // Остаточное число пробелов
// Размещение слов в выходной строке
}
Шаг 4: Просмотр строки при определении параметров и форматировании можно выполнить, используя:
-цикл в цикле: цикл просмотра всех слов, в который включен цикл посимвольного просмотра интервала между словами и самого слова;
-цикл посимвольного просмотра строки, с использованием признака нахождения внутри слова или вне его - inword.
Выберем второй вариант. При этом необходимо учесть, что символ конца строки может рассматриваться как конец слова (разделитель), поэтому проверку на выход из цикла нужно делать после выполнения тела цикла.