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

Methods_AP_LABS_II

.pdf
Скачиваний:
17
Добавлен:
17.03.2016
Размер:
1.05 Mб
Скачать

int 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 слова тексту.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]