Студопедия

Главная страница Случайная страница

КАТЕГОРИИ:

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Пример 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 с интерфейсом этих функций. Ниже приводится содержимое этих файлов.

 


Поделиться с друзьями:

mylektsii.su - Мои Лекции - 2015-2024 год. (0.007 сек.)Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав Пожаловаться на материал