Символьні рядки в с
Символьні рядки зберігають таку інформацію, як імена файлів, назви книг, імена службовців та інші символьні поєднання. Більшість програм на C ++ широко використовують символьні рядки. Далі ви дізнаєтеся, що в C ++ символьні рядки зберігаються в масиві типу char, який закінчується символом NULL (або ASCII 0).
Головна відмінність між символьними рядками і іншими типами масивів полягає в тому, як C ++ вказує останній елемент масиву, програми на C ++ представляють кінець символьного рядка за допомогою символу NULL, який в C ++ зображується як спеціальний символ '\ 0'. Коли присвоюються символи символьної рядку, необхідно помістити символ NULL ( '\ 0') після останнього символу в рядку. Наприклад, наступна програма ALPHABET. CPP привласнює букви від А до Я змінної alphabet, використовуючи цикл for. Потім програма додає символ NULL в цю змінну і виводить її за допомогою cout.
char alphabet [34]; // 33 літери плюс NULL char letter;
letter ++, index ++) alphabet [index] = letter;
cout <<"Буквы " < Програма надає рядку символ NULL, щоб вказати останній символ рядка: Коли вихідний потік cout виводить символьний рядок, він по одному виводить символи рядка, поки не зустріне символ NULL. Коротше кажучи, Cимвол NULL вказує програмі останній символ в рядку. Зверніть увагу на цикл for, який з'являється в попередній програмі. Як бачите, цикл инициализирует і збільшує дві змінні (letter і index). Коли цикл for инициализирует або збільшує кілька змінних, розділяйте операції коми (кома теж є оператором C ++): for (letter = 'A', index = 0; letter <= 'Я'; letter++, index++) C ++ автоматично додає NULL до строкових констант При створенні символьної строкової константи компілятор C ++ автоматично додає символ NULL, як показано на рис.1. Мал. 1. Компілятор C ++ автоматично додає символ NULL до строкових констант. Коли програми виводять символьні рядкові константи за допомогою вихідного потоку cout, cout використовує символ NULL (який компілятор додає до рядка) для визначення останнього символу виведення. Використання символу NULL Якщо ви використовуєте рядкові константи, укладені в подвійні лапки, компілятор C ++ автоматично додає символ NULL. Більшість функцій C ++ використовують символ NULL для визначення ланцюжка довжиною. Наступна програма LOOPNULL.CPP злегка змінює попередню програму, використовуючи цикл for для виведення вмісту рядка: char alphabet [34]; // 33 символу плюс NULL char letter; for (letter = 'A', index = 0; letter <= 'Я'; letter++, index++) alphabet[index] = letter; for (index = 0; alphabet [index] 1 = NULL; index ++) cout < Цикл for по одному досліджує символи рядка. Якщо символ НЕ NULL (не останній символ рядка), цикл виводить символ, збільшує індекс, і процес триває. Як 'А' відрізняється від "А" Символ всередині одинарних лапок є символьне константу. Компілятор C ++ виділяє тільки один байт пам'яті для зберігання символьної константи. Однак символ в подвійних лапках є строкову константу - цей символ і символ NULL (додається компілятором). Таким чином, компілятор буде виділяти два байта для символьного рядка. Малюнок 2 ілюструє, як компілятор C ++ зберігає символьну константу 'А' і строкову константу "А". Ініціалізація символьного рядка char title [64] = "Вчимося програмувати на мові C ++"; char title [] = "Вчимося програмувати на мові C ++"; char title [64] = "Вчимося програмувати на мові C ++"; char lesson [64] = "Символьні рядки"; cout <<"Книга: " < cout <<"Урок: " < Деякі програми, представлені в решти книги, будуть ініціювати символьні рядки подібним способом. Знайдіть час для експерименту з цією програмою, змінюючи символи, що привласнюються кожному рядку. Передача рядків у функції Передача символьного рядка в функцію подібна передачі будь-якого масиву як параметр. Усередині функції вам потрібно просто вказати тип масиву (char) і ліву і праву дужки масиву. Вам не треба вказувати розмір рядка. Наприклад, наступна програма SHOW_STR.CPP використовує функцію show_ string для виведення символьного рядка на екран: void show_string (char string []) cout < show_string ( "Вчуся програмувати на C ++"); Функція show_string трактує параметр символьного рядка як масив: void show_string (char string []) Так як символ NULL вказує кінець рядка, функція не вимагає параметр, який задає кількість елементів в масиві. Замість цього функція може визначити останній елемент, просто знайшовши в масиві символ NULL. Функції C ++ часто використовують символ NULL для визначення кінця рядка. Наступна програма STR_LEN.CPP створює функцію з ім'ям string_length, яка шукає символ NULL в рядку для визначення кількості символів, що містяться в рядку. Далі функція використовує оператор return для повернення довжини рядка викликала функції. Програма передає кілька різних символьних рядків в функцію, відображаючи довжину кожної з них на екрані: int string_length (char string []) for (i = 0; string []! = '\ 0'; i ++); // Нічого не робити, але перейти до // наступного символу return (i); довжина рядка char title [] = "Вчимося програмувати на мові C ++"; char lesson [] = "Символьні рядки"; cout <<"Строка " < cout <<"Строка " < Функція запускається з першого символу рядка (елемент 0) і потім досліджує кожний елемент до тих пір, поки не зустріне NULL. Символ NULL являє собою символ ASCII 0. C ++ використовує значення 0, щоб представляти брехня. Таким чином, оскільки символ NULL дорівнює 0, програми можуть спростити багато операцій циклу. Наприклад, багато функцій переглядають символьні рядки символ за символом в пошуку NULL. Наступний цикл for ілюструє, як програма може шукати NULL в рядку: for (index = 0; string [index]! = NULL; index ++) Оскільки символ NULL дорівнює 0, багато програм спрощують цикли, які шукають NULL, як показано нижче: for (index = 0; string [index]; index ++); В даному випадку поки символ, що міститься в string [index] НЕ NULL (0 або брехня), цикл триває. Використання строкових функцій бібліотеки етапу виконання Більшість компіляторів C ++ забезпечує великий набір функцій, які називаються бібліотекою етапу виконання. Бібліотека етапу виконання містять багато різних функцій, які маніпулюють рядками. Наприклад, функція strupr перетворює символьний рядок в рядок верхнього регістру. Подібно до цього, функція strlen повертає кількість символів в рядку. Більшість бібліотек етапу виконання забезпечують навіть функції, які дозволяють переглядати рядки в пошуках певного символу. Наприклад, наступна програма STRUPR.CPP ілюструє використання функцій strupr і strlwr бібліотеки етапу виконання: // функцій strupr і strlwr char title [] = "Вчимося програмувати на мові C ++"; char lesson [] = "Символьні рядки"; cout <<"Верхний регистр: " < cout <<"Нижний регистр: " < Використання бібліотечних функцій, які маніпулюють рядками може зберегти час, необхідний для програмування. Більшість функцій, які маніпулюють рядками, покладаються на символ NULL як на кінець рядка. Якщо програми присвоюють рядки символів, то слід переконатися, що вони додають символ NULL в якості останнього символу рядка. Якщо програми не використовують NULL відповідним чином, то функції, які покладаються на символ NULL, будуть збиватися. Символьний рядок являє собою масив символів, що завершується 0 (символом NULL). Символ NULL розміщується за останнім символом рядка. Якщо програма використовує рядкові константи, укладені в подвійні лапки, компілятор C ++ автоматично додає символ NULL. Більшість компіляторів C ++ в своїх бібліотеках етапу виконання забезпечують широкий набір функцій для маніпулювання рядками.