СИМВІЛЬНІ РЯДКИ

M. УЕІТ С. ПРАТА Д. МАРТІН
Мова Сі - керівництво для початківців
Мова Сі - керівництво для початківців
СИМВІЛЬНІ РЯДКИ - ВСТУП
"Символьний рядок" - це послідовність, що складається з одного або більше символів Як приклад розглянемо наступний рядок:
"Рядки виливались прямо з серця!"
Лапки не є частиною рядка. Вони вводяться лише у тому, щоб відзначити її початок і поклала край, тобто. грають таку ж роль, як і апострофи у разі одиночного символу.
У мові Сі немає спеціального типу, який можна було б використовувати для опису рядків Замість цього рядки подаються у вигляді "масиву" елементів типуchar. Це означає, що символи в рядку можна уявити собі розташованими в сусідніх осередках пам'яті - по одному символу в осередку (рис. 41).
МАЛ. 4. 1. Рядок як масив осередків
Слід зазначити, що у малюнку останнім елементом масиву є символ . Це "нуль-символ", і в мові Сі він використовується для того, щоб відзначати кінець рядка Нуль-символ - не цифра0 ; він не виводиться на друк і таблиці коду ASCII має номер0. Наявність нуль-символу означає, що кількість осередків масиву має бути принаймні на одну більшу, ніж кількість символів, які потрібно розміщувати в пам'яті.
Ну, а тепер спитаємо, що таке масив? Масив можна уявити собі як сукупність кількох осередків пам'яті, об'єднаних в один рядок Якщо ви віддаєте перевагу більш формальним і суворим визначенням, то масив - це впорядкована послідовність елементів даних одного типу. яких можна помістити один елемент типуchar. Ми здійснили це за допомогою оператора опису
static char name [40],
Зважаючи на деяку специфіку, пов'язану з реалізацією функціїscanf( ) у нашій системі, ми змушені використовувати цю другу

РИС.4.2. Опис імені масиву типуchar
форму, але ймовірно, що ви зможете вибрати будь-яку з них. Якщо виявиться, що при роботі з першою формою оператора опису у вас виникнуть труднощі при вирішенні наших прикладів, спробуйте скористатися другою. Насправді друга форма має працювати у будь-якій системі, але ми хочемо застосувати типstatic до того часу, доки розглянемо в гл. 10 (поняття класів пам'яті).
На перший погляд, все це виглядає досить складним: ви повинні створити масив, розмістити символи у вигляді рядка і не забути додати в кінці. На щастя, про більшість деталей компілятор може подбати сам.
Спробуйте виконати наведену нижче програму, щоб подивитися, як все відбувається на практиці:
#define PRAISE "Ось ця така, яке чудове ім'я"
printf("Як вас звати? n");
printf("Привіт, %s %sn" , name, PRAISE);
Символ%s служить вказівкою функціїprintf( ) надрукувати рядок. Результат виконання програмипохвала 1 може виглядати, наприклад, так:
Елмо Бланк Привіт, Елмо, Оце так, яке чудове ім'я !
Як бачите, нам не довелося самим поміщати нуль символ у кінець масиву. Це завдання було виконано за нас функцієюscanf( ) при читанні рядка, що вводиться.PRAISE - "символічна рядкова константа". Нижче ми розглянемо директиву#define більш докладно, а поки ви повинні знати, що лапки, які містять фразу, що йде за рядковою константоюPRAISE, ідентифікують цю фразу якрядок, і тому в її кінець буде вміщено нуль-символ.
Зауважимо (і це дуже важливо), що функціяscanf( ) при введенні рядка "Елмо Бланк" читає лише ім'я Елмо. Справа в тому, що, зустрівши якийсь роздільник (пробіл, символ табуляції або перекладу рядка), функціяscanf( ) припиняє введення символів, тобто в даному випадку вона припиняє опитування змінноїname в той момент, коли доходить до пробілу між "Елмо" та "Бланк". Взагалі кажучи, функціяscanf( ) вводить лише одиночні слова, а не цілу фразу як рядок. Для читання вхідної інформації в мові Сі є інші функції, наприклад, функціяgets( ), призначена для обробки рядків загального вигляду. Більш повно роботу з рядками ми розглянемо у наступних розділах.
Необхідно зауважити також, що рядок"х" не те саме, що символ'x'. Перша відмінність:'х' - об'єкт одного з основних типів(Char), тоді як"х" - об'єкт похідного типу (масиву елементів типуchar ). Друга відмінність:"х" насправді складається з двох символів - символу'x' і нуль-символу.