Пример 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 Все права принадлежат авторам размещенных материалов.
|