You are on page 1of 5

Лабораторна робота №1.9.

Рядки
Мета роботи: оволодіти навичками обробки рядків як масивів та з використанням функцій

Рядок являє собою одномірний масив символів, останнім елементом якого є символ з кодом 0
(рядок завершується нулем - NULL terminated string).

масив символів 0 1 2 3 4 5 6

сhar_array П Р И К Л А Д

рядок 0 1 2 3 4 5 6 7

str П Р И К Л А Д \0

Способи ініціалізації рядків:


 посимвольна
char S[10]={'y','e','s','\0'};
 ініціалізація літералом
char S [10]="Yes";
 ініціалізація без зазначення довжини масиву
char S[]={'y','e','s','\0'};
або
char S []="Yes";
в останньому випадку буде створено масив з чотирьох елементів, у виділену пам'ять
будуть розміщені три символи та додатково - четвертий символ - '\0'.
Якщо кількість символів рядка менше ніж довжина масиву, більшість компіляторів заповнять
залишок пам’яті, що виділена, NULL-ом.
Для звернення до будь-якого елемента символьного рядка можна користуватися індексом
масиву, наприклад, S[0], S[7], або користуватися вказівником типа char*.
Ініціалізація рядка через вказівник:
char *st ="Yes";
або
char S []="Yes";
char *st =S;
Ім'я масиву – це константа, яка є вказівником на 0-елемент масиву. Тому припустимими є
записи:
st = S; або st = &S[0]; // запис st= &S ; - помилка!!
Введення рядків з клавіатури:
int scanf(const char *format, argList) const char *format – шаблон вводу, містить символи
трьох типів: специфікатори формату, спеціальні символи
та інші символи
%s scanf() повертає число, що дорівнює кількості даних з
до пробіла! stdin , які зчитані та дійсно присвоєні змінним з argList
Якщо до присвоєння значення першого поля виникла
помилка, функція повертає EOF
char *gets(char *str) Функція зчитує символи з stdin та розміщує їх у масив
символів, на який указує str доки не зустрінеться '\n'
до '\n' або EOF.
Символ '\n' не стає частиною рядка, замість нього
додається '\0'
Обробка рядка ( на прикладі друку символів через пробіл)

char str[]= "What makes this program?";


for (int i=0; str[i]; i++) char *st = str;
printf("%c ",str[i]); do{
printf("%c ",*st);
}while (*st++);

Масиви символьних рядків. Можна використовувати індекс рядочка для доступу до декількох
різних рядків.
char *text[4]; // вільний масив.
char *text[4] = {"Значення змінної а", "університет", "краса", "екзамен"};
У цьому випадку text являється масивом, що складається з чотирьох вказівників на символьні
рядки. Кожен рядок символів представляє собою символьний масив, тому маємо чотири
вказівника на масиви.
Вказівник text[0] посилається на перший рядок, відповідно *text[0] еквівалентно 'З', а
*text[1] еквівалентно 'у'.
char text[4][23]; // Задає прямокутний масив, у якому всі рядки мають фіксовану довжину.

Деякі функції для опрацювання рядків


#include <string.h>
Функція Опис

strlen(char *s) Повертає кількість символів у рядку s

strcat(char *s1, char *s2) Приєднує s2 до s1 та повертає s1

strncat(char *s1, char *s2, int n) Приєднує не більше n символів рядка s2 до s1, закінчує
рядок символом '\0' та повертає s1

strсpy(char *s1, char *s2) Копіює s2 в рядок s1, включаючи символ '\0' та повертає
s1

strncpy(char *s1, char *s2, int n) Копіює не більше n символів s2 в рядок s1

strcmp(char *s1, char *s2) Порівнює s1 та s2, повертає значення 0, якщо рядки
еквівалентні

strncmp(char *s1, char *s2, int n) Порівнює не більше n символів рядків s1 та s2, повертає
значення 0, якщо початкові n символів рядків
еквівалентні
strset(char *s, char c) Заповнює рядок s символами, код яких дорівнює
значенню c, повертає вказівник на рядок s

strnset(char *s, char c, int n) Заміняє перші n символів рядочка s символами, код яких
дорівнює значенню c, повертає вказівник на рядок s

strtok(char *s1, char *s2) Визначає частину рядка s1, яка закінчується перед
першим однаковим символом в рядках s1 та s2
Приклад розвязку завдання
// Ввести рядок та символ-зразок.
// Знайти кількість входжень символа-зразка в рядок
#define _CRT_SECURE_NO_WARNINGS
#include <Windows.h>
#include <stdio.h>
#include <string.h>

int main()
{
SetConsoleCP(1251); SetConsoleOutputCP(1251);
char s[80], t;
int k, i;
printf("Введіть рядок: ");
gets(s); // функція введення рядка, включаючи пробіли
printf("Введіть символ: ");
t = getchar(); // повертає значення символу, введеного з клавіатури
for (i = 0,k = 0; s[i] != '\0'; i++)
{ if (s[i] == t)
k++;
}
puts(s); // функція друкує рядок і переводить курсор на новий рядок, може виводити
рядкові константи
printf("У рядочку %d символів ", k);
putchar(t); // Виводить значення символу getchar();
printf("\n");
system("pause");
return 0;
}

Індивідуальні завдання
Введіть рядок символів довжиною до 80 символів з клавіатури.
Завдання 1. Рядок містить єдине слово. Використовувати операцію індексації заборонено!
Тільки ВКАЗІВНИКИ!
Надрукувати рядок посимвольно а) після вводу б) після (визначено у варіантах завдань)
Завдання 2 Рядок містить слова, розділені пробілом, кількість слів >4 ( наприклад, прізвище -
ім’я – по батькові – країна -місто). Реалізувати завдання у двох варіантах: а) розглядаючи рядок
як масив символів б) використовуючи функції роботи з рядками (<string.h>)
Варіант №1.
1) Довжина рядка парна. В кожній парі символів переставити їх місцями.
Приклад: а) GhAbEfCd б) hGbAfEdC
2) Надрукувати друге слово та кількість букв у третьому слові.

Варіант №2.
1) Довжина рядка кратна 3. В кожній трійці символів переставити місцями 1-й та 3-й. Приклад: а)
AbCDeFGhI б) CbAFeDIhG
2) Задати (ввести з клавіатури) 2 букви-зразки та вилучити ці букви з першого слова (ущільнити
рядок).
Варіант №3.
1) Довжина рядка непарна. Обміняти місцями символи, що попарно рівновіддалені від
центрального символу. Приклад: а) abcdEfghi, б) ihgfEdcba
2) Надрукувати найдовше слово у зворотному порядку
Варіант №4.
1) Довжина рядка непарна. Обміняти місцями першу та другу половину рядка.
Приклад: а) abcdEfghi, б). fghiEabcd
2) Надрукувати перше слово речення в рядок, друге у стовпчик, третє в рядок.
Варіант №5.
1) Надрукувати рядок так, щоб кожна парна літера друкувалась у верхньому регістрі, а кожна
непарна – в нижньому. Приклад: а) abcdefghi, б) aBcDeFgHi
2) Задати (ввести з клавіатури) одну букву-зразок та продублювати (подвоїти) цю букву у третьому
слові речення.
Варіант №6.
1) Довжина рядка парна. Обміняти місцями символи, що попарно рівновіддалені від
центрального символу. Приклад: а) abcdfghi, б) ihgfdcba
2) Надрукувати таблицю кількість букв – слово для всіх слів речення.
Варіант №7.
1) Довжина рядка кратна 3. В кожній трійці символів переставити місцями 1-й та 3-й. Приклад: а)
AbCDeFGhI б) CbAFeDIhG
2) Надрукувати найкоротше слово.
Варіант №8.
1) Довжина рядку парна. Змінити порядок символів у рядку на протилежний. Змінити регістр
літер таким чином, щоб дві центральні були маленькі, дві сусідні з ними – великі, чергування
регістру маленькі-великі зберігати до обох кінців рядку.
Приклад: а) hgfedcba, б) AbCdeFgH.
2) Надрукувати третє слово та кількість букв у першому слові..
Варіант №9.
1) Довжина рядка кратна 3. В кожній трійці символів переставити місцями 1-й та 3-й. Приклад: а)
AbCDeFGhI б) CbAFeDIhG
2) Надрукувати третє слово у зворотному порядку.
Варіант №10.
1) Надрукувати рядок так, щоб кожна третя літера друкувалась у верхньому регістрі, всі інші – в
нижньому. Приклад: а) edfghc, б) edFghC.
2) Задати (ввести з клавіатури) 2 букви-зразки. Надрукувати кількість кожної з букв-зразків у
першому, третьому та четвертому словах.
Варіант №11.
1) Відсортувати рядок за спаданням та надрукувати всі символи у верхньому регістрі. Приклад: а)
edfghc б) HGFEDC.
2) Задати (ввести з клавіатури) одну букву-зразок та надрукувати всі слова, що починаються з цієї
букви
Варіант №12.
1) Довжина рядку парна. Змінити порядок символів у рядку на протилежний. Змінити регістр
літер таким чином, щоб дві центральні були маленькі, дві сусідні з ними – великі, чергування
регістру маленькі-великі зберігати до обох кінців рядку. Приклад: а) hgfedcba, б) AbCdeFgH.
2) Продублювати (подвоїти) букву третього слова
Варіант №13.
1) Відсортувати рядок за спаданням та надрукувати всі символи у верхньому регістрі. Приклад: а)
edfghc б) HGFEDC.
2) Поміняти місцями друге та четверте слово в рядку.
Варіант №14.
1) Відсортувати рядок за зростанням та надрукувати всі символи у верхньому регістрі. Приклад: а)
edfghc б) CDEFGH.
2) Поміняти порядок слів перше-останнє, друге-передостаннє і так далі.
Варіант №15.
1) Довжина рядка кратна 3. В кожній трійці символів переставити місцями 1-й та 3-й. Приклад: а)
AbCDeFGhI б) CbAFeDIhG
2) Надрукувати друге слово у зворотному порядку та визначити найдовше
Варіант №16.
1) Вилучити голосні букви Приклад: а) abcdefghi б) bcdfgh
2) Надрукувати перше слово речення в рядок, друге у стовпчик, третє в рядок.

You might also like