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

симвільні

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' і нуль-символу.