Methods_AP_LABS_II
.pdfint strncmp(const char *s1, const char *s2, size_t
maxlen); - порівнює частину одного рядка з частиною іншого. Функція strncmp() робить таке ж беззнакове порівняння, як і strcmp(), але переглядає не більш, ніж maxlen символів. Вона починає з першого символу кожного рядка і закінчує, коли чергові символи в рядках різні чи коли перевірено maxlen символів. Функція strncmp() повертає значення типу int, зміст якого аналогічний strncmp().
char *strcpy(char *dest, const char *src); - копіює рядок src у dest, завершуючи роботу після копіювання символу закінчення рядка. Функція strcpy() повертає покажчик на результуючу рядок
(dest).
size_t strcspn(const char *s1, const char *s2); -
шукає в рядку перший сегмент, що не містить жодного символу з заданого набору символів. Функція strcspn() повертає довжину першого сегмента рядка, що зустрівся, s1, що складається тільки з символів, що не входять у
рядок s2.
size_t strlen(const char *s); - обчислює довжину рядка s.
Функція strlen() - повертає число символів у s, не враховуючи символ
кінця рядка.
char *strlwr(char *s); - перетворює букви верхнього регістра
(А-Z) рядка s у букви нижнього регістра (a-z). Інші символи не змінюються. Функція strlwr() повертає покажчик на рядок s.
char *strnset(char *s, int ch, size_t n); - заміняє задану кількість символів n у рядку s на зазначений символ ch. Функція strnset() копіює символ ch у перші n байтів рядка s. Якщо n > strlen(s), тоді strnset() заміняє усі символи і зупиняється по досягненню кінця рядка (виявлений нульовий символ).
Функція strnset() - повертає покажчик на змінений рядок s.
char *strpbrk(const char *s1, const char *s2); шукає в рядку перше входження будь-якого символу з переданого функції набору символів. Функція strpbrk() здійснює пошук у рядку s1 першого входження кожного із символів, обумовлених рядком s2. Функція strpbrk() повертає покажчик на перше входження будь-якого символу рядка s2. Якщо жоден символ із символів s2 не виявлений у s1, то функція повертає нуль.
char *strrchr(const char *s, int ch); - шукає в рядку останнє входження заданого символу. Функція strrchr() перевіряє рядок s у зворотному напрямку, роблячи пошук заданого символу. Функція strrchr() знаходить останнє входження символу ch у рядок s.
Передбачається, що символ закінчення рядка є частиною рядка. Функція strrchr() повертає покажчик на останнє входження символу ch. Якщо ch
не виявлений у s, то strrchr() повертає нуль.
char *strrev(char *s); - перевертає рядок. Функція strrev()
переставляє всі символи в рядку в зворотному порядку, за винятком завершального нульового символу. Наприклад, "строка\0" буде перетворена в "акортс\0". Функція strrev() повертає покажчик на перевернений рядок.
char *strset(char *s, int ch); - заміняє всі символи рядка s
на заданий символ ch, закінчуючи роботу при виявленні символу кінця рядка. Функція strset() повертає покажчик s на результуючу рядок.
char *strstr(const char *s1, const char *s2); -
здійснює пошук у рядку s2 першого входження в нього підрядка s1.
Функція strstr() повертає покажчик на елемент у рядку s2, з якого починається s1 (покажчик на s1 у s2). Якщо s1 не виявлений в s2, то strstr() повертає нуль.
Функції для роботи з рядками з бібліотеки <stdlib.h>:
double atof(const char *s); перетворює рядок s в тип double.
int atoi(const char *s); перетворює рядок s в тип int. long atol(const char *s); перетворює рядок s в тип long.
double strcod(const char *s, **end); перетворює рядок s у
числове представлення до символу, на який вказує end.
Розглянемо декілька прикладів.
Лістинг 8.2 Приклад використання функції strlen().
#include <stdio.h> #include <string.h> int main(void) {
char str[] = “Привіт світ!”; int length = strlen(str);
printf(“Довжина рядка = %d.\n”,length); return 0;
}
Результатом роботи програми буде виведення на екран числа 12.
Враховуючи, що перший символ має нульовий індекс, можна побачити, що ця функція враховує і символ ‘\0’.
Лістинг 8.3. Приклад використання функції strcpy().
#include <stdio.h> #include <string.h> int main(void) {
char src[] = “Привіт світ!”; char dest[100]; strcpy(dest,src); printf(“%s\n”,dest);
return 0;
}
8.2 Практичні завдання
1. Вихідні дані для завдань (таблиця 6.1) вводяться з клавіатури та з файлу (створити функції для обох видів введення). Результат виводиться на екран та записується у файл (також створити дві різні функції виведення).
Таблиця 8.1
|
Варіанти завдань |
|
|
|
|
Варіант |
Завдання |
|
|
|
|
|
Заданий символьний файл f, що містить довільний текст, |
|
|
довжиною більше 5000 слів. Слова в тексті розділені |
|
|
пробілами й розділовими знаками. Одержати 100 слів, що |
|
1 |
найбільш часто зустрічаються, і число їх появ. Розв'язати |
|
завдання: |
||
|
||
|
a) без обмеження на довжини слів; |
|
|
б) припускаючи, що будь-яке слово тексту складається не |
|
|
більше ніж з 16 букв |
|
|
Заданий символьний файл f. Групи символів, розділені |
|
|
пробілами (одним або декількома) і, які не містять пробілів |
|
2 |
всередині себе, будемо називати словами. |
|
|
Вилучити з файлу всі однобуквені слова й зайві пробіли. |
|
|
Результат записати у файл g. |
|
|
Заданий символьний файл f. Записати у файл g зі |
|
3 |
збереженням порядку проходження ті символи файлу f: |
|
а) яким у цьому файлі передує буква а; |
||
|
||
|
б) слідом за якими у цьому файлі йде буква а. |
|
|
Заданий символьний файл f. Знайти саме довге слово серед |
|
|
слів, друга буква яких є е; якщо слів з найбільшою |
|
|
довжиною декілька, то знайти останнє. Якщо таких слів |
|
4 |
немає взагалі, то сповістити про це. Розв'язати це завдання: |
|
|
а) вважаючи, що слова складаються не більше ніж з 10 |
|
|
символів; |
|
|
б) без обмеження на число символів у рядку. |
|
|
Заданий символьний файл f. Вважаючи, що кількість |
|
5 |
символів у рядку не перевершує двадцяти, визначити, |
|
скільки у файлі f є слів, що складаються із одного, двох, |
||
|
||
|
трьох і т.д. символів. |
|
|
Заданий символьний файл f, що містить відомості про |
|
|
співробітників установи, записані за наступним зразком: |
|
6 |
прізвище_ім'я_по-батькові, прізвище_ім'я_по-батькові,... |
|
|
Записати ці відомості у файлі g, використовуючи зразки: |
|
|
ім'я_по-батькові_прізвище, ім'я_по-батькові_прізвище,… |
Заданий символьний файл f, що містить відомості про співробітників установи, записані по наступному зразкові:
7прізвище_ім'я_по-батькові, прізвище_ім'я_по-батькові,… Записати ці відомості у файлі g, використовуючи зразки: прізвище_і.п., прізвище_і.п., прізвище_і.п.,… Відомості про учня складаються з його імені та прізвища і
8назви класу (року навчання та букви), у якому він вчиться. Заданий файл f, що містить відомості про учнів школи. З'ясувати, чи є в школі однофамільці.
Відомості про учня складаються з його імені та прізвища і назви класу (року навчання та букви), у якому він вчиться.
9Заданий файл f, що містить відомості про учнів школи. Одержати список учнів даного класу за наступними зразками: прізвище ім'я, прізвище і., і. прізвище.
Відомості про автомобіль складаються з його марки, номера та прізвища власника.
10Заданий файл f, що містить відомості про декілька автомобілів. Знайти прізвища власників і номера автомобілів даної марки.
Відомості про автомобіль складаються з його марки,
11номера та прізвища власника. Заданий файл f, що містить відомості про декілька автомобілів. Знайти кількість автомобілів даної марки.
Дано два символьні файли f1 і f2 Файл f1 містить довільний текст. Слова в тексті розділені пробілами та розділовими знаками. Файл f2 містить не більш 40 слів, які розділені
12комами. Ці слова утворюють пари: кожне перше слово вважається замінним, кожне друге слово тим, що
заміняють. Знайти у файлі f1 усі замінні слова й замінити на відповідні. Результат помістити у файлі g.
|
Заданий файл f, який містить номера телефонів |
||||
13 |
співробітників |
установи; |
вказується |
прізвище |
|
співробітника, його ініціали та номер телефону. Знайти |
|||||
|
|||||
|
телефон співробітника за його прізвище та ініціалами. |
||||
|
Заданий файл f, що містить інформацію про експортовані |
||||
|
товари: вказується найменування товару, |
країна, що |
14імпортує товар, і обсяг партії, що поставляється, у штуках. Знайти країни, у які експортується даний товар, і загальний обсяг експорту.
Заданий файл f, що містить відомості про речовини: вказується назва речовини, її питома вага та провідність
15(провідник, напівпровідник, ізолятор):
а) знайти питомі ваги та назви всіх напівпровідників; б) вибрати дані про провідники і впорядкувати їх за убуванням питомих ваг.
Заданий текст. Якщо в тексті немає символу «*», то
16залишити цей текст без зміни, інакше кожну з малих латинських букв, що передують першому входженню символу «*», замінити на цифру 3.
Заданий текст. Якщо в тексті немає символу «+», то
17залишити текст без зміни, інакше кожну із цифр, що передує першому входженню символу «+», замінити символом «-».
Заданий текст. Групи символів, розділені пробілами (одним або декількома) і не містять пробілів всередині себе,
18будемо називати, як і колись, словами. Знайти всі слова, що містять найбільшу кількість голосних латинських букв (а,
е, i, о, і).
Заданий текст. Групи символів, розділені пробілами (одним
19або декількома) і не містять пробілів всередині себе, будемо називати, як і колись, словами. Знайти всі слова, у яких частка букв а, b максимальна.
Заданий текст. Групи символів, розділені пробілами (одним або декількома) і не містять пробілів всередині себе,
20будемо називати, як і колись, словами. У тих словах, які закінчуються комбінацією ing, замінити це закінчення на ed.
Задане натуральне число n, дорівнює вираженій в копійках ціні деякого товару, наприклад, 317, 5005, 100 і т.д.
21Виразити ціну в рублях і копійках, наприклад 3 руб. 17 коп., 50 руб. 05 коп., 1 руб. 00 коп. і т.д. (Число копійок записується завжди двома цифрами).
Заданий текст, кожний символ якого може бути малою буквою, цифрою або одним зі знаків «+», «-», «*». Групою букв будемо називати таку сукупність послідовно розташованих букв, якій безпосередньо не передує й за
22якою безпосередньо не йде буква. Аналогічно визначимо групу цифр і групу знаків.
а) з'ясувати, чи зустрічається в даному тексті група букв one;
б) з'ясувати, чи вірно, що в даному тексті більше груп букв, ніж груп знаків.
Умова - дивися варіант 22.
а) якщо в даному тексті є не менш двох груп букв, то кожний знак «+», що зустрічається між двома першими по
23порядку групами букв, замінити цифрою 1, знак - замінити цифрою 2, а знак «*» - цифрою 3. Інакше залишити текст без зміни;
б) обчислити кількість входжень букви f у перші три групи букв (у припущенні, що текст містить не менш трьох груп
букв).
Умова - дивися варіант 22.
а) знайти число таких груп букв, які починаються й
24кінчаються однією й тією ж буквою; б) знайти всі такі групи букв, у які буква а входить не менш двох раз.
Задані натуральне число n, символ s (n < 1000, s - одна з букв і, р, д, в, т, п, що вказує падіж - називний, родовий,
25давальний, знахідний, орудний, місцевий). Записати кількісний числівник, що позначає n, у відповідному падежі.
Задані символьні файли f і g. Визначити, чи збігаються компоненти файлу f з компонентами файлу g. Якщо ні, то
26одержати номер першого компонента, у якому файли f і g відрізняються між собою. У випадку, коли один з файлів має n компонент (n > 0) і повторює початок іншого (більш довгого) файлу, відповіддю повинне бути число n+1.
Заданий символьний файл f. Передбачається, що довжина одного слова не перевищує десяти й що число слів ділиться на 100. Підготувати файл для друку слів у дві колонки по
27п'ятдесят рядків на сторінці. Слова повинні бути розміщені у файлі f1 у наступному порядку: 1-е слово, 51-е слово, 2-е слово, 52-е слово, ..., 50-е слово, 100-е слово, потім (наступна сторінка) 101-е слово, 151-е слово, ..., 150-е слово, 200-е слово і т.д.
28Заданий символьний файл f. Обчислити число входжень у файл комбінацій аb.
29Заданий символьний файл f. Визначити, входить чи у файл комбінація abcdefgh.
Заданий текстовий файл, що містить програму мовою Паскаль. Перевірити цю програму на невідповідність числа
30відкриваючих і закриваючих круглих дужок. Вважати, що кожний оператор програми
а) Займає не більш одного рядки файлу f;
б) Може займати довільне число рядків файлу f.
Заданий текстовий файл f. Записати в переверненому виді рядки файлу f у файл g. Порядок рядків у файлі повинен
31а) збігатися з порядком вихідних рядків у файлі f;
б) бути зворотним стосовно порядку рядків вихідного файлу.
32Задані символьні файли f і g. Записати у файл h усі початкові співпадаючі компоненти файлів f і g.
2.Скласти програму за варіантом (таблиця 8.2):
Таблиця 8.2
|
Варіанти завдань |
|
|
|
|
Варіант |
Завдання |
|
|
|
|
1 |
Дано символьний рядок. Замінити всі символи '!' крапками, |
|
крім першого й вивести отриманий рядок. |
||
|
||
|
Дано символьний рядок. Визначити, є чи в даному рядку |
|
2 |
два будь-яких однакових символи, і вивести відповідне |
|
|
повідомлення. |
|
|
Дано символьний рядок і слово, що складається із чотирьох |
|
3 |
символів. Визначити, є чи в даному рядку всі букви даного |
|
|
слова. |
|
|
Дано символьний рядок. Одержати новий рядок, взявши з |
|
4 |
даної всі символи до першої двокрапки й після останнього. |
|
Якщо двокрапка відсутнє або зустрічається в рядку тільки |
||
|
||
|
один раз, то вивести відповідне повідомлення. |
|
|
Дано символьний рядок. Одержати новий рядок, взявши з |
|
|
даної всі символи, що перебувають між першою дужкою, |
|
5 |
що відкривається, і останньої що закривається (якщо які- |
|
|
небудь дужки відсутній, то вивести відповідне |
|
|
повідомлення). |
|
|
Дано символьний рядок. Замінити всі послідовності |
|
6 |
символів 'on' на 'onlіne' і вивести новий рядок (якщо |
|
шуканої послідовності в рядку ні, те вивести відповідне |
||
|
||
|
повідомлення). |
|
|
Дано символьний рядок. Слово - послідовність символів |
|
7 |
між пробілами, не утримуючі пробіли усередині себе. |
|
|
Визначити кількість слів у даному рядку. |
|
|
Дано символьний рядок. Слово - послідовність символів |
|
8 |
між пробілами, не утримуючі пробіли усередині себе. |
|
|
Визначити довжину самого короткого слова. |
|
|
Дано символьний рядок. Слово - послідовність символів |
|
9 |
між пробілами, не утримуючі пробіли усередині себе. |
|
|
Визначити довжину самого короткого слова. |
|
|
Дано символьний рядок. Слово - послідовність символів |
|
10 |
між пробілами, не утримуючі пробіли усередині себе. |
|
|
Визначити кількість слів заданої довжини. |
|
|
Дано символьний рядок. Слово - послідовність символів |
|
11 |
між пробілами, не утримуючі пробіли усередині себе. |
|
|
Визначити кількість і вивести всі самі довгі слова. |
|
|
Дано символьний рядок і натуральне число N. Слово - |
|
|
послідовність символів між пробілами, не утримуючі |
|
12 |
пробіли усередині себе. Визначити довжину слова, що |
|
коштує на N-ом місці й вивести всі слова, що складаються |
||
|
||
|
з такої ж кількості символів, що й знайдене слово. Якщо N |
|
|
більше кількості слів у пропозиції, то вивести відповідне |
повідомлення.
Дано символьний рядок і символ. Слово - послідовність
13символів між пробілами, не утримуючі пробіли усередині себе. Визначити кількість слів у рядку, що кінчаються на заданий символ.
Дано рядок символів. Визначити кількість букв 'о' між
14самою лівою дужкою, що відкривається, і самою правою дужкою, що закривається (якщо які-небудь дужки відсутній, то вивести відповідне повідомлення).
15Дано символьний рядок. Підрахувати найбільша кількість букв 'а', що йдуть у ній підряд.
Дано символьний рядок і символ. Слово - послідовність
16символів між пробілами, не утримуючі пробіли усередині себе. Вивести всі слова, у яких є заданий символ.
Дано символьний рядок. Слово - послідовність символів
17між пробілами, не утримуючі пробіли усередині себе. Замінити закінчення слів 'іng' на 'ed' і вивести отриманий рядок.
Дано символьний рядок. Слово - послідовність символів
18між пробілами, не утримуючі пробіли усередині себе. Відредагувати задана пропозиція, видаляючи з нього слова, які вже зустрічалися в пропозиції.
Дано символьний рядок. Слово - послідовність символів
19між пробілами, не утримуючі пробіли усередині себе. Знайти саме довге симетричне слово.
Дано символьний рядок. Слово - послідовність символів
20між пробілами, не утримуючі пробіли усередині себе. Для кожного зі слів указати, скільки разів воно зустрічається в даному рядку.
Дано два символьні рядки. Слово - послідовність символів
21між пробілами, не утримуючі пробіли усередині себе. Вивести слова, які з в обох рядках.
Дано символьний рядок. Слово - послідовність символів між пробілами, не утримуючі пробіли усередині себе.
22Відредагувати задана пропозиція, видаляючи з нього слова з непарними номерами й перевертаючи слова з парними
(приклад, how do you do -і> od od).
Дано два символьні рядки. Слово - послідовність символів між пробілами, не утримуючі пробіли усередині себе.
23Кожний рядок складається з попарно різних слів. Перевірити, чи можна із другий рядок з першої, видаленням деяких її символів.
Дано два символьні рядки. Слово - послідовність символів
24між пробілами, не утримуючі пробіли усередині себе. Знайти саме довге загальне слово двох заданих пропозицій.
Дано два символьні рядки. Слово - послідовність символів
25між пробілами, не утримуючі пробіли усередині себе. Знайти саме коротке зі слів у першій пропозиції, який немає в другому.
Дано символьний рядок. Слово - послідовність символів
26між пробілами, не утримуючі пробіли усередині себе. Перевірити, чи вірно, що в заданому рядку будь-яке несиметричне слово має парну довжину
3.Розв’язати завдання за варіантом:
Задача1.
Маємо текст на кирилиці, що закінчується крапкою. Слова вiддiляються одним пропуском. Голосні літери : А,Е,Є,I,И,О,У,Ю,Я; дзвінкі приголосні : Б,В,Г,Д,Ж,З,Л,М,Н,Р; глухі приголосні: К,П,С,Т,Ф,Х,Ц,Ч,Ш,Щ. Написати в алфавітному порядку:
1.Усi голоснi лiтери, що входять в кожне слово.
2.Усi приголоснi лiтери, якi не входять у жодне слово.
3.Усi дзвiнкi приголоснi лiтери, якi входять хоча б в одне слово.
4.Усi приголоснi лiтери, якi не входять нi в одне слово.
5.Усi приголоснi лiтери, якi входять тiльки в одне слово.
6.Усi глухi приголоснi лiтери, якi входять тiльки в одне слово.
7.Усi дзвiнкi приголоснi лiтери, якi входять бiльш, нiж в одне слово.
8.Усi голоснi лiтери, якi входять лише в одне слово.
9.Усi дзвiнкi приголоснi лiтери, якi входять в кожне непарне слово.
10.Усi глухi приголоснi лiтери, якi входять у кожне непарне слово i не входять хоча б в одне парне слово.
Задача 2.
Текст задано латинськими літерами та цифрами. В кiнцi стоїть крапка. Голосні лiтери – А,Е,I,О,Y,U.
11.Яких лiтер (голосних чи приголосних) в текстi бiльше?
12.Пiдрахувати кiлькiсть цифр у текстi.
13.Надрукувати в зростаючiй послiдовностi всi цифри, якi входять у
текст.
14.Надрукувати першi входження лiтер у текст, зберiгаючи їх початкову взаємну послiдовнiсть.
15.Надрукувати усi лiтери, якi входять в текст не менш, як двiчi.
16.Надрукувати усi лiтери, якi входять в текст по одному разу.
17.Надрукувати через промiжок усi послiдовностi цифр у текстi.
18.Надрукувати через промiжок усi послiдовностi букв у текстi.
19.Надрукувати усі цифри, якi не входять до тексту.
20.Надрукувати всі букви, якi не входять до тексту.
Задача 3.
Дано текст, який складається з латинських букв, цифр i закінчується крапкою. Всередині тексту є роздiловi знаки : коми i крапки з комою. Слова вiдокремлюються одне вiд одного роздiловими знаками або пропусками.
21. Надрукувати в стовпчик окремi слова тексту.