Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Книга6.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
2.45 Mб
Скачать

8 Рядки в с

8.1 Рядки

Рядки є одним з найбільш корисних та важливих типів даних. У мові С немає окремого типу даних “рядок символів”, подібного до типу string у алгоритмічній мові PASCAL. Тому робота з рядками реалізована шляхом використання одновимірних масивів типу char. Рядок символів – це одновимірний масив типу char, останнім елементом якого є нульовий байт. Нульовий байт – це байт, кожен біт якого рівний нулю, при цьому для нульового байта визначена символьна константа '\0' (ознака закінчення рядка або нуль-термінатор). Тому, якщо рядок містить k символів, в описі масиву потрібно вказати розмірність k+1.. Кожен елемент масиву є типу char. Нульовий символ ‘\0’ автоматично додається останнім байтом символьного рядка та виконує роль ознаки його кінця.

Так, для збереження у масиві рядкової константи “КРУАСАН”, необхідно описати масив char s[7]. В кінці рядкової константи символ \0' вказувати не потрібно, оскільки це зробить компілятор мови С (рис. 8.1).

Приклад 8.1. Оголошення символьного рядка.

#include <string>

int main ()

{

char myString[] = "The world is gray!";

printf("%s\n", myString);

system("pause");

return 0;

}

Результат роботи програми:

Приклад 8.2. Рядок символів.

char s[8]=”КРУАСАН”;

0

1

2

3

4

5

6

7

К

Р

У

А

С

А

Н

\0

Рисунок 8.1 – Сприйняття комп’ютером символьного рядка

Так сприймає рядок комп’ютер. Тому, S[0]==’К’, S[6]==’Н’.

Так як рядок в С – це масив символів, що закінчується нуль-символом ‘\0’, то за місцезнаходженням цього символу визначається фактична довжина рядка. (рис. 8.2).

Рисунок 8.2 – Символ і рядок

8.2.Створення рядків

Приклад 8.3. Символьний рядок.

#include <string>

int main ()

{

char myString[] = "string!";

printf("%s\n", myString);

system("pause");

return 0;

}

Результат роботи програми:

Кількість елементів у масиві дорівнює кількості символів у рядку плюс один, оскільки нульовий символ також є елементом масиву. Кожна рядкова константа, навіть у випадку, коли вона ідентична іншій рядковій константі, зберігається у окремому місці пам'яті. Якщо необхідно ввести у рядок символ лапок, то перед ним треба поставити символ зворотного слешу "\". У рядок можуть бути введені будь-які спеціальні символьні константи, перед якими стоїть символ "\".

8.3 Прототипи

Прототипи всіх функцій, що працюють з рядками символів, містяться у файлі string.h. Всі функції працюють з рядками, що закінчуються нульовим символом. Деякі з них описані у таблиці 8.1.

Приклад 8.4. Використання прототипів функцій.

#include <string.h>

#include <stdio.h>

#include <stdlib.h>

int main()

{

char s1[]="Hello, ";

char s2[]={'w','o','r','l','d','!','\0'};

strcat(s1, s2);

printf("s1:%s s2:%s\n", s1, s2);

/* на екран буде виведено: s1:Hello, world! s2: world! */

printf("%c\n", s1[4]);

/* на екран буде виведено літеру o зверніть увагу, що в

даному випадку використано %с замість %s так як виво-

диться лише 1 символ*/

int len=strlen(s1);

/* довжина першого рядка тепер дорівнює 13 */

printf("%i\n", strcmp(s1, s2));

/* програма виведе результат порівняння. */

strcpy(s1, s2);

printf("%s %s %i\n", s1, s2, len);

/* на екран буде виведено: world! world! 13 */

system("pause");

}

Результат роботи програми:

Таблиця 8.1 – Прототипи функцій

Ім’я функції

Виконання

int strcmp(const char *, const char *);

Лексикографічне порівняння рядків. Повертає < 0 якщо перша стрічка менша за другу; > 0 якщо друга стрічка більша за першу і 0, кщо вони рівні.

int strcat(char *, char *)

З'єднати два рядки(об’єднаний рядок записується у першу змінну, а друга змінна залишається без

змін);

int strcpy(char *, char *)

Копіювати рядок s2 у рядок s1(перша змінна дорівнює другій, а друга залишається незмінною);

int strlen(char *)

Визначити довжину рядку (кількість символів без нульового символа).

int strncmp(const char *, const char *, size t)

Лексикографічне порівняння перших n байтів рядків

char *strncpy(char *, const char *, size n);

Копіює до n байт рядка з одного місця в інше

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