Deprecated: mysql_connect(): The mysql extension is deprecated and will be removed in the future: use mysqli or PDO instead in /home/studb20/public_html/index.php on line 4
 1.11.2 Функції роботи з рядками - Програмування С, С++теорія та практика (частина 1) - Studbook
Главная->Інформатика та програмування->Содержание->1.11.2 Функції роботи з рядками

Програмування С, С++теорія та практика (частина 1)

1.11.2 Функції роботи з рядками

1.   Функції введення рядків.

Прочитати рядок із стандартного потоку введення можна за допомогою функції деіі'і). Вона отримує рядок із стандартного потоку введення. Функція читає символи до тих пір, поки їй не зустрінеться символ нового рядка ‘\п’, який генерується натисканням клавіші БМТБК. Функція зчитує всі символи до символу нового рядка, додаючи до них нульовий символ ‘\0’.

Синтаксис :

еИаг *деЇ5(сІіаг *Ьи1їег);

Як відомо, для читання рядків із стандартного потоку введення можна використовувати також функцію зсап/() з форматом %§. Основна відмінність між зсап/() і деіі'() полягає у способі визначенні досягнення кінця рядка; функція зсап/() призначена скоріше для читання слова, а не рядка. Функція зсап/() має два варіанти використання. Для кожного з них рядок починається з першого не порожнього символу. Якщо використовувати %8, то рядок продовжується до (але не включаючи) наступного порожнього символу (пробіл, табуляція або новий рядок). Якщо визначити розмір поля як %10§, то функція зсап/() не прочитає більше 10 символів або ж прочитає послідовність символів до будь-якого першого порожнього символу.

2.   Функції виведення рядків.

Тепер розглянемо функції виведення рядків. Для виведення рядків можна використовувати функції риіі'() і ргіпІ/().

Синтаксис функції ри1з():

іп! риЇ5(сіїаг *5Ігіпд);

Ця функція виводить всі символи рядка іігіпд у стандартний потік виведення. Виведення завершується переходом на наступний рядок.

Різниця між функціями риіі'() і ргіпІ/() полягає в тому, що функція ргіпІ/() не виводить автоматично кожний рядок з нового рядка.

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

#іпс1игіе<з'Ьгіпд. Ь>

3.   Визначення довжини рядка. Для визначення довжини рядка використовується функція зігїепі). Її синтаксис :

5І2е_{ 5{гіеп(соп5{ сііаг *5);

Функція 8Іг1еп() повертає довжину рядка 8, при цьому завершуючий нульовий символ не враховується.

Приклад :

сЬаг *з= "8оте з'Ьгіпд"; іп'Ь 1еп;

Наступний оператор встановить змінну Іеп рівною довжині рядка, що адресується покажчиком я:

1еп = з'ЬгІеп(з) ; /* 1еп == 11 */

4.   Копіювання рядків. Оператор присвоювання для рядків не визначений. Тому, якщо зі і з2 - символьні масиви, то неможливо скопіювати один рядок в інший наступним чином.

сЬаг з1[100]; сЬаг з2 [100] ; з1 = з2; /* помилка */

Останній оператор (з1=з2;) не скомпілюється.

Щоб скопіювати один рядок в інший необхідно викликати функцію копіювання рядків зігсруі). Для двох покажчиків зі і з2 типу сЬаг * оператор з'Ьгсру(з1,з2) ;

копіює символи, що адресуються покажчиком з2 в пам’ять, що адресується покажчиком зі, включаючи завершуючі нулі.

Для копіювання рядків можна використовувати і функцію зігпсру(), яка дозволяє обмежувати кількість символів, що копіюються. з'Ьгпсру(гіез'Ьап'Ьіоп, зоигсе, 10);

Наведений оператор скопіює 10 символів із рядка зоигсе в рядок гіезіапііоп. Якщо символів в рядку зоигсе менше, ніж вказане число символів, що копіюються, то байти, що не використовуються встановлюються рівними нулю.

Примітка. Функції роботи з рядками, в імені яких міститься додаткова літера п мають додатковий числовий параметр, що певним чином обмежує кількість символів, з якими працюватиме функція.

5.    Конкатенація рядків. Конкатенація двох рядків означає їх об’єднання, при цьому створюється новий, більш довгий рядок. Наприклад, при оголошенні рядка

сЬаг £ігз£[]= "Один "; оператор

з^гса^(£ігз^, „два три чотири!");

перетворить рядок/іпі в рядок “Один два три чотири”.

При викликанні функції $1гса{($1,$2) потрібно впевнитися, що перший аргумент типу сЬаг * ініціалізований і має достатньо місця щоб зберегти результат. Якщо $1 адресує рядок, який вже записаний, а $2 адресує нульовий рядок, то оператор з'Ьгса'Ь(з1,з2) ;

перезапише рядок $1, викликавши при цьому серйозну помилку. Функція $ігса{() повертає адресу рядка результату (що співпадає з її першим параметром), що дає можливість використати „каскад” декількох викликів функцій : з'Ьгса'Ь(з'Ьгса'Ь(з1,з2) ,з3) ;

Цей оператор додає рядок, що адресує $2, і рядок, що адресує $3, до кінця рядка, що адресує $1, що еквівалентно двом операторам: з'Ьгса'Ь(з1,з2) ; з^гса^(з1,з3);

Повний список прототипів функцій роботи з рядками можна знайти в додатках на стор.

6.        Порівняння рядків. Функція $1гстр() призначена для порівняння двох рядків. Синтаксис функції :

іпі 5{гстр(соп5Ї еИаг *з1, сопзї еИаг*52);

Функція $1гстр() порівнює рядки $1 і $2 і повертає значення 0, якщо рядки рівні, тобто містять одне й те ж число однакових символів. При порівнянні рядків ми розуміємо їх порівняння в лексикографічному порядку, приблизно так, як наприклад, в словнику. У функції насправді здійснюється посимвольне порівняння рядків.

76                                                  Розділ 1.  Мова програмування Сі

Кожний символ рядка зі порівнюється з відповідним символом рядка з2. Якщо зі лексикографічно більше з2, то функція зігстр() повертає додатне значення, якщо менше, то - від’ємне.

 

58