Главная Случайная страница Контакты | Мы поможем в написании вашей работы! | ||
|
Написать программу форматирования текста, читаемого из файла 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 с интерфейсом этих функций. Ниже приводится содержимое этих файлов.
Дата публикования: 2015-10-09; Прочитано: 376 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!