Здавалка
Главная | Обратная связь

Пример 1 программы, выполняющей обработку произвольного текста.

Лабораторная работа №2.

Строки символов

Цель работы

Приобретение навыков обработки произвольного текста. Получение практических навыков обработки текстовых файлов.

Порядок выполнения работы

1. Ознакомиться с постановкой задачи (вариант задания соответствует вашему номеру в списке группы).

2. Разработать блок-схему алгоритма решения поставленной задачи.

3. Составить программу, решающую поставленную задачу, где основные моменты обработки представить в виде функций.

4. Отладить программу на подготовленных наборах тестовых данных.

5. Подготовить отчет по лабораторной работе. Отчет должен включать в себя:

- постановку задачи;

- блок схему алгоритма решения поставленной задачи;

- текст программы с комментариями;

- наборы тестовых исходных данных с соответствующими результатами работы программы; (2 и более тестовых наборов);

6. Защитить лабораторную работу перед преподавателем

!!!! Внимание в конце контрольные вопросы !!!!

И примеры программ: обработка произвольного текста

Копирования файла

ВАРИАНТЫ ЗАДАНИЙ

Вариант №1.

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

Вариант №2.

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

Вариант №3.

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

 

Вариант №4.

Для произвольного текста (взятого из файла), содержащего не более 10 строк, в каждой строке не более 80 символов, сформировать массив, элементы которого равны длинам слов. Вывести на экран исходный текст и сформированный массив. Найти количество слов с максимальной длинной и также вывести на экран.

 

Вариант №5.

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

 

Вариант №6.

В произвольном тексте (взятом из файла), содержащем не более 10 строк, в каждой строке не более 80 символов, заменить каждую согласную букву символом *, а каждую гласную – символом #. Вывести полученный текст а также информацию о том сколько в каждой строке содержится гласных и согласных букв на экран. Выведенную информацию продублировать в текстовый файл.

 

Вариант №7.

Из произвольного текста (взятого из файла), содержащего не более 10 строк, в каждой строке не более 80 символов, вывести на экран слова в порядке не возрастания их длины. Сами строки разместить в порядке убывания количества слов, также отобразить номер оригинальной строки в самом начале.

 

Вариант №8.

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

 

Вариант №9.

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

 

Вариант №10.

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

 

Вариант №11.

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

 

Вариант №12.

В произвольном тексте (взятом из файла), содержащем не более 10 строк, в каждой строке не более 80 символов, удалить из каждого слова (длина которого больше двух символов) первую и последнюю букву. Вывести полученный текст на экран. Выведенную информацию продублировать в текстовый файл, имя которого задает пользователь.

 

Вариант №13.

Для произвольного текста (взятого из файла), содержащего не более 10 строк, в каждой строке не более 80 символов, сформировать массивы A и B, элементами которых являются количество букв «а» в каждом слове, и длина слова соответственно. Вывести на экран исходный текст и сформированные массивы.

 

Вариант №14.

Из произвольного текста (взятого из файла), содержащего не более 10 строк, в каждой строке не более 80 символов, удалить все вхождения заданного слова. Вывести полученный текст и информацию о том, сколько слов было удалено, на экран. Выведенную информацию продублировать в текстовый файл, имя которого задает пользователь.

 

Вариант №15.

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

 

Вариант №16.

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

 

Вариант №17.

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

 

Вариант №18.

В произвольном тексте (взятом из файла), содержащем не более 10 строк, в каждой строке не более 80 символов, удалить из каждой группы идущих подряд цифр, в которой более 2-х цифр и которой предшествует точка, все цифры, начиная с третьей (например, ав+0.1999-1.1 преобразуются в ав + 0.19-1.1). Вывести на экран полученный текст, а так же продублировать выведенную информацию в текстовый файл, имя которого задает пользователь.

 

Вариант №19.

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

 

Вариант №20.

В произвольном тексте (взятом из файла), содержащем не более 10 строк, в каждой строке не более 80 символов, удалить из каждой группы идущих подряд цифр, которой не предшествует точка, все начальные нули (кроме последнего, если за ним идет точка). Отсортировать строки в порядке возрастания количества проведенных удалений. При выводе полученного текста указать номер оригинальной строки. Выведенную информацию продублировать в текстовый файл, имя которого задает пользователь.

Вариант №21.

В произвольном тексте (взятом из файла), содержащем не более 10 строк, в каждой строке не более 80 символов, удалить из каждого слова все последующие вхождения первой буквы. Вывести полученный текст и статистику о количестве операций удаления для каждой строки на экран. Строки текста расположить в порядке возрастания количества проведенных операций удаления. Выведенную информацию продублировать в текстовый файл, имя которого задает пользователь.

Вариант №22.

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

 

Вариант №23.

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

Вариант №24.

В произвольном тексте (взятом из файла), содержащем не более 10 строк, в каждой строке не более 80 символов, найти и вывести на экран слова, в которых есть сочетание букв «ёнк» или «онк» (или латинская альтернатива). Подсчитать количество повторений каждого слова содержащих указанное сочетание. Выведенную информацию продублировать в текстовый файл, имя которого задает пользователь.

 

Вариант №25.

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

 

Вариант №26.

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

 

Вариант №27.

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

 

Вариант №28.

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

 

Вариант №29.

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

 

 

КОНТРОЛЬНЫЕ ВОПРОСЫ

 

1. Раскройте понятие строки в языке программирования С? В чем отличие строки от символьного массива? Каким образом производится обращение к отдельным символам строки?

2. Как динамически выделить память под строку? Как производится ввод-вывод символов и строк в программах на языке С? Какие способы создания массива строк вы знаете?

3. Как организуется доступ к файлам? Какие виды доступа вы знаете? Каким образом можно считать/записать данные из текстового файла?

4. Какие системные функции используются для выполнения следующих действий:

- нахождения длины строки;

- сравнения двух строк;

- копирования одной строки в другую;

Напишите собственные варианты определения функций, решающих вышеперечисленные задачи.

 

Пример 1 программы, выполняющей обработку произвольного текста.

Постановка задачи. В произвольном тексте, содержащем не более 10 строк, в каждой строке не более 80 символов, удалить из слова среднюю букву, если слово нечетной длины. Полученный текст напечатать.

#include<stdio.h>

#include<conio.h>

#include<string.h>

void main()

{const int m=10; // m - максимальное количество строк

char *s[m], // массив указателей на строки

wstr[80]; // рабочая строка

int i, // текущий индекс строки

j, // текущий индекс символа в строке

j1,

kol_str, // количество введенных строк

// местоположение: если находимся внутри слова, то inword=1,

// а если вне слова, то inword=0

inword=0,

beg, // индекс первой буквы слова

dl_str, // длина текущей строки

dl_word; // длина очередного выделенного слова

clrscr();

i=0;

// Цикл ввода строк символов, пока не конец и кол-во строк не > 10

while ((gets(wstr) != NULL)&&(i<10)) //считываем очередную стоку в рабочую строку

{

s[i]=new char[strlen(wstr)+1]; //выделяем динамически память для хранения введенной строки

//адрес выделенной памяти сохраняем в массиве указателей на строки //размер памяти на 1 больше длины рабочей строки (для '\0')

 

strcpy(s[i],wstr); //копируем содержимое рабочей строки

i++; //в динамически выделенный участок памяти

}

kol_str = i;

 

for (i = 0; i < kol_str ; i++) // перебираем все введенные строки

{ dl_str = strlen(s[ i ]); // определяем длину текущей строки

for (j = 0; j <= dl_str; j++) // движемся по строке

if( *(s[ i ] + j ) == ' ' || *(s[ i ] + j ) == '\0' || *(s[ i ] + j) == ',' )

{ // если встретили символ-разделитель

if (inword == 1) // и этот символ первый после слова

{ dl_word = j - beg; // определяем длину текущего слова

if (dl_word % 2) // если длина нечетная, то удаляем из слова средний символ, для

// чего сдвигаем все символы строки на одну позицию влево

// после середины слова и до конца строки (включая '\0')

{

for (j1 = beg + dl_word /2; j1 < dl_str ; j1++)

*(s[ i ] + j1) = *(s[ i ] + j1 + 1);

dl_str = dl_str - 1; // уменьшаем длину строки и

j = j -1; // индекс текущего символа в строке

}

inword = 0; // теперь находимся вне слова

}

}

else // если не разделитель

if ( inword == 0) // и находимся вне слова,

{inword = 1; // то встретили новое слово

beg = j; // запоминаем индекс первого символа в слове

}

}

printf("\nРезультат\n"); // Выводим на экран преобразованный текст

for (i = 0; i < kol_str; i++)

puts(s[ i ]);

getch();

}





©2015 arhivinfo.ru Все права принадлежат авторам размещенных материалов.