![]() Главная страница Случайная страница КАТЕГОРИИ: АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
Пример 7.8. Многофайловый проект - форматирование текста
Написать программу форматирования текста, читаемого из файла unformt.txt и состоящего из строк ограниченной длины. Слова в строке разделены произвольным количеством пробелов. Программа должна читать входной файл по строкам, форматировать каждую строку и выводить результат в выходной файл formatd-.txt. Форматирование заключается в выравнивании границ текста слева и справа путем равномерного распределения пробелов между соседними словами, а также в отступе с левой стороны страницы на margin позиций, то есть результирующий текст должен находиться в позициях margin + 1.. margin + maxljine. Кроме этого, программа должна подсчитать общее количество слов в тексте. Алгоритм решения задачи: 1. Открыть входной файл. 2. Читать файл построчно в текстовый буфер line, попутно удаляя возможные 3. Для каждой строки 11 пе выполнить следующие действия: - Вычислить величину интервала (количество пробелов), которую необходимо обеспечить между соседними словами для равномерного распределения слов в пределах строки. - Вывести каждое слово из строки 1 i пе в выходной файл, вставляя между словами необходимое количество пробелов и одновременно увеличивая счетчик слов на единицу. 4. После обработки последней строки входного файла вывести на экран значение счетчика слов и закрыть выходной файл. Разбиение на подзадачи. В результате детализации описанного алгоритма определяем спецификации нужных нам функций:
J void Deflnter (const char* pline, int & base int. int & add int. int & inter)
определяет для строки, на которую указывает pline, количество межсловных промежутков inter, требуемую величину основного интервала base int для каждого промежутка (количество пробелов) и величину дополнительного интервала add int, определяемую как остаток от деления общего количества пробелов в строке на количество межсловных промежутков; последняя величина должна быть равномерно распределена путем добавления одного пробела в каждый из первых add i nt промежутков;
void GetLine (FILE* finp. char* pline)
читает очередную строку из входного файла в массив символов с адресом pi ine, ликвидируя при этом пробелы в начале строки;
void Putlnterval (FILE* fout. const int k)
выводит очередной интервал, состоящий из к пробелов;
int PutWord (FILE*fout, const char*pline.const int startpos)
выводит очередное слово в выходной файл, начиная с позиции startpos текущей строки pi ine; возвращает номер позиции в строке pi i ne, следующей за последним переданным символом, или 0 - если достигнут конец строки;
int SearchNextWord'(const char*pline.const int curpos)
возвращает номер позиции, с которой начинается следующее слово в строке pi 1 пе, или 0, если достигнут конец строки (поиск начинается с позиции curpos). Разбиение на модули. Наша программа будет располагаться в двух исходных файлах: task7_7.cpp - с функцией main, edit. cpp - с реализацией перечисленных выше функций, а также заголовочный файл edit.h с интерфейсом этих функций. Ниже приводится содержимое этих файлов.
|