
Урок 7: Рядки – Перетворюємо Символи в Слова (І Надаємо Їм Змісту)
Вітаю знову, безстрашний досліднику коду! 👋
Сьогодні ми вирушаємо у світ рядків — бо, чесно кажучи, числа класні, але інколи потрібні й слова! Чи це друкування імені, чи зчитування речення, чи надання твоїй програмі трохи людяності, рядки — це те, що тобі потрібно.
Отже, візьми свою чашку кави (або чаю, я не судитиму), і давай навчимося маніпулювати символами, як справжні профі.
Що Таке Рядок?
Рядок у C — це, по суті, масив символів. Так-так, наші улюблені масиви повертаються! Але цього разу ми зберігаємо не числа, а символи, які, об’єднуючись, утворюють слова, речення чи навіть абзаци.
У C рядки — це масиви типу char, які закінчуються спеціальним символом, що називається нульовий термінатор (\0), який вказує програмі, де рядок закінчується.
Ось як можна оголосити рядок:
char ім_я[10] = "Аліса";
Пояснення: Ми оголосили масив символів ім_я, що може зберігати до 10 символів. Рядок "Аліса" зберігається в цьому масиві, і C автоматично додає нульовий термінатор в кінці.
Друкування Рядків
Друкувати рядки так само просто, як використовувати printf з форматом %s. Спробуємо:
#include <stdio.h>
int main() {
char ім_я[10] = "Аліса";
printf("Привіт, %s!\n", ім_я);
return 0;
}
Пояснення: Ми використали %s, щоб вивести рядок, що зберігається в масиві ім_я. Легкотня, правда?
Отримання Рядків від Користувача
Отримання рядка від користувача може бути трохи хитрим у C. Можна використати scanf, але це може бути ризиковано (якщо користувач введе занадто багато тексту). Безпечніший варіант — це fgets, який дозволяє обмежити кількість символів для зчитування.
Ось як можна безпечно отримати рядок від користувача:
#include <stdio.h>
int main() {
char ім_я[50];
printf("Введи своє ім'я: ");
fgets(ім_я, sizeof(ім_я), stdin); // Безпечніше за scanf
printf("Привіт, %s", ім_я);
return 0;
}
Пояснення: fgets зчитує до 49 символів (залишаючи місце для нульового термінатора) з введення користувача і зберігає їх у масиві ім_я. Зверни увагу, як ми використовуємо sizeof(ім_я), щоб уникнути переповнення пам’яті.
Примітка: У C
strlenрахує байти, а не символи. Це означає, що в UTF-8 рядках, таких як"Привіт", де кожна літера займає 2 байти,strlen("Привіт")поверне12, а не6. У разі потреби рахуйте символи окремою функцією, яка підтримує UTF-8.
Маніпуляція Рядками
Тепер поговоримо про маніпуляцію рядками. Оскільки рядки — це просто масиви символів, ти можеш отримати доступ до окремих символів і змінювати їх за допомогою індексу, як у будь-якому іншому масиві.
Ось приклад зміни першої літери рядка:
#include <stdio.h>
int main() {
char ім_я[] = "Боб";
printf("Оригінальне ім'я: %s\n", ім_я);
ім_я[0] = 'Р'; // Змінюємо 'Б' на 'Р'
printf("Змінене ім'я: %s\n", ім_я);
return 0;
}
Пояснення: Ми отримали доступ до першого символу рядка (індекс 0) і змінили його з 'Б' на 'Р', перетворивши "Боб" на "Роб".
Функції для Роботи з Рядками
C надає набір функцій для роботи з рядками. Ось кілька найпоширеніших:
strlen– Визначає довжину рядка (без нульового термінатора).strcpy– Копіює один рядок в інший.strcmp– Порівнює два рядки, щоб визначити, чи однакові вони.strcat– Об’єднує (склеює) два рядки.
Спробуймо їх:
#include <stdio.h>
#include <string.h> // Потрібно для роботи з рядками
int main() {
char перший[20] = "Привіт";
char другий[20] = "Світ";
printf("Довжина першого: %lu\n", strlen(перший)); // %lu для типу size_t
strcat(перший, другий); // Об'єднує другий рядок із першим
printf("Після об'єднання: %s\n", перший);
strcpy(другий, "Усім");
printf("Новий другий: %s\n", другий);
if (strcmp(перший, другий) == 0) {
printf("Рядки однакові.\n");
} else {
printf("Рядки різні.\n");
}
return 0;
}
Пояснення:
strlen(перший)повертає довжину рядка"Привіт".strcat(перший, другий)об’єднує"Світ"з кінцем рядка"Привіт", отримуючи"ПривітСвіт".strcpy(другий, "Усім")копіює"Усім"у другий рядок, замінюючи"Світ".strcmp(перший, другий)порівнює рядки і повідомляє, чи вони однакові чи різні.
Рядки і Вказівники
У C можна працювати з рядками і через вказівники. Ось швидкий приклад:
#include <stdio.h>
int main() {
char *ім_я = "Аліса";
printf("Привіт, %s!\n", ім_я);
return 0;
}
Пояснення: Тут ім_я — це вказівник на рядок "Аліса". Це більш ефективний спосіб управління пам’яттю для роботи з рядками, але він потребує обережності, щоб уникнути випадкового перезапису пам’яті.
Домашнє Завдання: Опитування про Улюблений Фільм
Створи програму, яка:
- Запитує в користувача назву його улюбленого фільму.
- Виводить повідомлення, що включає назву фільму.
- Використовує
strlen, щоб вивести, скільки символів у назві фільму.
Заключні Думки
Вітаю! Ти щойно опанував основи роботи з рядками в C. Рядки неймовірно корисні для обробки тексту, і вони є всюди в програмуванні. У Уроці 8 ми зануримось у світ функцій, розширюючи те, що ти вже вивчив. Побачимось там! 🎉✨
See also
- Урок 8: Вказівники та Пам'ять – Як Керувати Адресами (І Не Заблукати!)
- Урок 6: Масиви – Організуй Свої Дані Як Профі
- Урок 5: Функції – Як Навести Порядок у Хаосі (І Уникнути Повторення Коду!)
- Урок 4: Структури Управління – Як Приймати Рішення (І Казати Своїй Програмі Що Робити!)
- Урок 3: Арифметичні Операції – Змусь Свої Змінні Працювати на Тебе!