Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Практикум по основам программирования. Массивы. Строки. Подпрограммы. Учебное пособие

.pdf
Скачиваний:
0
Добавлен:
07.09.2026
Размер:
2 Мб
Скачать
символами-разделителями из строки s2. При первом вызове strtok возвращает указатель на первое слово (первый символ) s1. Чтобы найти начало следующего слова в s1, необходимо вы­звать функцию strtok, задавая первый параметр NULL-значением. Набор символов-разделителей может от вызова к вызову различаться (т. е. вто­рой параметр может при каждом вызове быть другим). Когда при очередном вызове в s1 нет больше слов, функция возвращает NULL
strchr
char *strchr(const char *s, int c)
– поиск первого вхождения символа c в строку s.
Возвращает указатель на первое вхождение символа или NULL, если вхождение не найдено
strncat
char *strncat(char *s1, const char *s2, int kol)
– добавляет kol первых символов строки s2 в
строку s1
strncmp
int strncmp(const char *s1, const char *s2, int kol)
– сравнивает лексикографически первые kol сим-
волов строк s1 и s2. Результат аналогичен ре­зультату strcmp
strncpy
char *strncpy(char *s1, const char *s2, int kol)
– копирует первые kol символов строки s2 в стро-
ку s1 (если значение kol меньше длины s2, то символ \0‟ не добавляется в новую строку)
strnset
char *strnset(char *s, int c, int kol)
– заменяет первые kol символов строки s симво-
лом c
41
strpbrk
сhar *strpbrk(const char *s1, const char *s2)
– поиск в строке s1 первого вхождения любого из
символов строки s2. Возвращает указатель на первое вхождение или NULL, если нет общих символов в строках
strrchr
сhar *strrchr(const char *s, int c) – поиск в строке s последнего вхождения символа
c. Возвращает указатель на последнее вхожде-
ние символа или NULL, если заданный символ не найден
ПРАКТИЧЕСКОЕ ЗАДАНИЕ «СТРОКИ» Тема
Обработка текстовой информации.
Цель
Изучить правила конструирования строк, основные действия над
строками, получить практические навыки решения задач обработки текстов.
Содержание работы
1. Изучить правила конструирования строк.
2. Изучить стандартные функции работы со строками.
3. Спроектировать и отладить программу решения задачи, выбрав и
обосновав, наиболее удобную для отображения и обработки текста структуру данных.
Требования к выполнению задания
Для реализации действий над элементами текста использовать
стандартные функции работы со строками.
42
Варианты заданий
1 Дана непустая последовательность слов (не более 30), в каждом
слове не более 8 строчных латинских букв. Слова разделены запя­той, за последним словом точка. Найти:
а) те слова, перед которыми в последовательности находятся толь-
ко меньшие (по алфавиту) слова, а за ними – только большие;
б) все слова, встречающиеся в последовательности по одному разу; в) все различные слова, указав для каждого из них число его вхож-
дений в последовательность; г) все слова, входящие в последовательность более одного раза; д) все слова, оканчивающиеся на "ing"; е) все слова, начинающиеся на "cam"; ж) все слова, содержащие пять идущих подряд букв 'e'; з) все слова, содержащие наибольшее количество цифр, идущих
подряд; и) все слова, содержащие наибольшее количество гласных букв ('a',
'e', 'i', 'o', 'u');
к) все слова, в которых доля букв 'a' и 'b' максимальна; л) все слова, начинающиеся и кончающиеся согласными буквами.
2 Дана непустая последовательность слов (не более 40), в каждом
слове не более 10 символов. Слова разделены пробелом, за послед­ним словом точка. Определить:
а) встречается ли в последовательности группа букв "one". Найти
последнее вхождение этой группы; б) число вхождений группы букв "abc" в последовательность; в) что в последовательности больше – групп букв или групп зна-
ков? (группа состоит не менее чем из двух символов);
43
г) число таких групп букв, которые начинаются и заканчиваются
одной и той же буквой (группа состоит не менее чем из двух
символов); д) число таких групп букв, в которые буква 'a' входит не менее
двух раз (группа состоит не менее чем из двух символов). Группа
букв принадлежит слову.
3 Дана непустая последовательность слов (не более 50), в каждом
слове не более 8 символов. Слова разделены пробелом, за послед­ним словом точка. Найти те слова, которые отличаются от послед­него слова и удовлетворяют следующему условию:
а) слово симметрично; б) первая буква слова входит в него еще раз; в) в слове нет повторяющихся букв; г) каждая буква входит в слово не менее двух раз; д) в слове гласные буквы ('a', 'e', 'i', 'o', 'u') чередуются с согласны-
ми; е) длина слов максимальна; ж) слово совпадает с начальным отрезком латинского алфавита:
"a", "ab", "abc", … ; з) слово совпадает с конечным отрезком алфавита: "z", "yz", "xyz",
… .
Задачи для самостоятельной работы
1 Дан символ C. Вывести его код (т. е. номер в кодовой таблице). 2 Дано целое число N (31 < N < 256). Вывести символ с кодом, рав-
ным N.
3 Дан символ C. Вывести два символа, первый из которых предшест-
вует символу C в кодовой таблице, а второй следует за символом C.
44
4 Дано четное число N (> 0) и символы C1 и C2. Вывести строку дли-
ны N, которая состоит из чередующихся символов C1 и C2, начиная с C1.
5 Дана непустая строка S. Вывести строку, содержащую символы
строки S, между которыми вставлено по одному пробелу.
6 Дан символ C и строки S, S0. Перед каждым вхождением символа C
в строку S вставить строку S0.
7 Даны строки S и S0. Удалить из строки S все подстроки, совпадаю-
щие с S0. Если совпадающих подстрок нет, то вывести строку S без изменений.
8 Даны строки S, S1 и S2. Заменить в строке S последнее вхождение
строки S1 на строку S2.
9 Дана строка, состоящая из русских слов, разделенных пробелами
(одним или несколькими). Вывести строку, содержащую эти же слова, разделенные одним пробелом и расположенные в обратном порядке.
10 Дана строка, состоящая из русских слов, набранных заглавными
буквами и разделенных пробелами (одним или несколькими). Вы­вести строку, содержащую эти же слова, разделенные одним про­белом и расположенные в алфавитном порядке.
11 Дана строка-предложение с избыточными пробелами между слова-
ми. Преобразовать ее так, чтобы между словами был ровно один пробел.
12 Дана строка, содержащая полное имя файла, т. е. имя диска, список
каталогов (путь), собственно имя и расширение. Выделить из этой строки имя файла (без расширения).
13 Дана строка-предложение на русском языке и число K (0 < K < 10).
Зашифровать строку, выполнив циклическую замену каждой буквы на букву того же регистра, расположенную в алфавите на K-й по­зиции после шифруемой буквы (например, для K = 2 «А» перейдет в «В», «а» — в «в», «Б» — в «Г», «я» — в «б» и т. д.). Знаки препи­нания и пробелы не изменять.
45
14 Дана строка-предложение. Зашифровать ее, поместив вначале все
символы, расположенные на четных позициях строки, а затем, в обратном порядке, все символы, расположенные на нечетных по­зициях (например, строка «Программа» превратится в «ргамам­роП»).
15 Дана последовательность не более чем из 40 строчных латинских
букв, за которой следуют пробелы: а) напечатать эту строку предварительно преобразовав ее следую-
щим образом: первое вхождение символов "abc" заменить на
"def";
б) напечатать эту строку предварительно преобразовав ее следую-
щим образом: все вхождения последовательности символов
"abc" заменить на "def"; в) напечатать эту строку предварительно преобразовав ее следую-
щим образом: удалить первое w вхождение символа; г) напечатать эту строку предварительно преобразовав ее следую-
щим образом: удалить все вхождения последовательности сим-
волов "th"; д) напечатать эту строку предварительно преобразовав ее следую-
щим образом: первое вхождение символа 'x' заменить на после-
довательность символов "rs"; е) напечатать эту строку предварительно преобразовав ее следую-
щим образом: после каждой буквы 'q' добавить букву 'u'; ж) напечатать эту строку предварительно преобразовав ее следую-
щим образом: заменить все вхождения последовательности сим-
волов "ph" на "f"; з) напечатать эту строку предварительно преобразовав ее следую-
щим образом: заменить все вхождения последовательности сим-
волов "ed" на "ing".
16 Дана последовательность из 50 слов, каждое слово из 5 букв:
а) напечатать все слова, отличные от слова "hello";
46
б) напечатать слово, которое меньше всех других слов последова-
тельности; в) напечатать слово, которое больше всех других слов последова-
тельности; г) напечатать текст, составленный из последних букв всех слов по-
следовательности; д) напечатать все слова, содержащие ровно две буквы 'd'; е) напечатать все слова, отличные от первого слова;
17 Даны два различных слова, в каждом из которых от 1 до 8 строч-
ных латинских букв, за каждым словом пробел: а) напечатать эти слова в алфавитном порядке; б) напечатать длину каждого слова.
18 Дана последовательность, содержащая от 1 до 30 слов, в каждом из
которых от 1 до 10 строчных латинских букв; между соседними словами запятая, за последним словом – точка. Найти все слова от­личные от первого и удовлетворяющие следующему свойству:
а) слово встречается в последовательности не более двух раз; б) слово встречается в последовательности не менее двух раз; в) слово не содержит гласных букв; г) в слове гласные буквы чередуются с согласными; д) буквы слова упорядочены по алфавиту; е) слово начинается и кончается гласной буквой; ж) слово начинается гласной и кончается согласной буквой; з) слово имеет нечетную длину.
19 Дана последовательность, содержащая от 1 до 40 слов, в каждом из
которых от 1 до 15 строчных латинских букв; между соседними словами запятая, за последним словом – точка. Напечатать все сло­ва отличные от последнего, предварительно преобразовав каждое из них по следующему правилу:
а) перенести первую букву в конец слова; б) перенести последнюю букву в начало слова;
47
в) удалить из слова первую букву; г) удалить из слова последнюю букву; д) удалить из слова все последующие вхождения первой буквы; е) удалить из слова все предыдущие вхождения последней буквы; ж) оставить в слове только первые вхождения каждой буквы; з) если слово нечетной длины, то удалить его среднюю букву.
20 Дана непустая последовательность слов (не более 50), в каждом из
которых не более 20 символов; между соседними словами пробел, за последним словом – точка:
а) заменить в последовательности каждую группу букв "child" на
"children";
б) исключить из каждого слова все символы, не являющиеся бук-
вами ; в) исключить из каждого слова все символы, являющиеся цифрами; г) в словах, оканчивающихся на "ing", заменить это окончание на
"ed";
д) в словах, начинающихся на "un" исключить эти буквы; е) исключить из последовательности слова длиной 1; ж) исключить из последовательности симметричные слова; з) исключить из каждого слова последовательности группы симво-
лов, расположенные между символом '(' и символом ')', включая
и сами символы скобки; и) исключить из последовательности слова, состоящие только из
символов цифр.
21 Дана непустая последовательность слов из строчных латинских
букв; слова разделены запятыми, за последним словом точка. Сре­ди пар ai и bi , где ai – первая, а bi – последняя буквы i-го слова по­следовательности, определить наиболее часто встречающуюся па­ру.
48
22 Дан непустой текст из цифр, за которым следует точка. Найти наи-
более часто встречающуюся в этом тексте цифру, если таких цифр несколько найти любую из них.
23 Дана непустая последовательность слов из строчных латинских
букв, между соседними словами запятая, за последним словом точ­ка. Найти все буквы, входящие в наибольшее количество слов этой последовательности.
Контрольные вопросы
1. Конструирование строкового типа.
2. Стандартные функции работы со строками.
3. Способы представления текста в памяти.
4. Ввод-вывод текстовой информации.
49
ГЛАВА 3 ПОДПРОГРАММЫ
Декомпозиция задачи
При нисходящей разработке проектирование программы ведется
―сверху-вниз‖. В решаемой задаче сначала выделяется небольшое чис­ло достаточно самостоятельных, более простых задач (подзадач), а в проектируемой программе намечается соответствующее число блоков (частей программы), каждый из которых предназначен для решения одной из подзадач. Определяется функциональное назначение каждого блока (модуля): что он должен делать, какие данные являются исход­ными для блока, какие – результатами. Если какие-то из подзадач ока­зываются достаточно сложными (алгоритмы их решения не являются очевидными), то к каждой из них применяется аналогичный процесс выделения подзадач. Этот процесс пошаговой детализации продолжа­ется до тех пор, пока каждый из выделенных блоков программы не окажется таким, что его реализация (кодирование) на выбранном языке программирования уже не вызовет трудностей. Таким образом, про­грамма может иметь многоуровневую структуру. Если на каждом шаге детализации будут использоваться принципы структурного програм­мирования, то это обеспечит хорошую структурированность и про­граммы в целом.
Понятие подпрограммы
В языках программирования одним из средств реализации модуль-
ной структуры программы является метод подпрограмм.
Подпрограмма – это самостоятельная программная единица, кото-
рая позволяет выделить из программы частичный алгоритм и записать его только один раз, но использовать столько раз, сколько это необхо­димо. В языке C подпрограмма является минимальным исполняемым модулем программы.
Основные свойства подпрограмм:
1) подпрограмма должна иметь один вход и один выход;
50
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]