Ефективність мови С++ багато в чому визначається наявністю в ній розвинутих засобів для обробки символьної інформації. У стандартній бібліотеці С++ передбачено багато функцій, що виконують прості дії з символьними даними. Тому ця мова найкраще підходить для системної роботи: написання компіляторів, інтерпретаторів, операційних систем, редакторів тексту тощо.
У мові С та в ранніх версіях мови С++ рядки розглядалися як символьні масиви, і вся робота з ними ґрунтувалася на використанні цих масивів. Розроблена бібліотека функцій string.h містить потужні засоби для роботи з рядковими масивами. Рядок являє собою масив символів, який закінчується нуль-символом. Нагадаємо, що нуль-символ має код, що дорівнює 0, і запис у вигляді керуючої послідовності ‘\0’. За розташуванням нуль-символа визначається фактична довжина рядка. Кількість елементів символьного масиву складається з кількості символів у рядку плюс 1, тому що нуль-символ також є елементом масиву.
Для опису рядка використовуються звичайні засоби опису масивів, наприклад: char str[25];. Індексування такого масиву, як і будь-якого іншого, починається з нуля.
Символьні послідовності, розділені тільки пропусками, розглядаються як один рядок, тобто запис:
“Один час сегодня стоит
двух часов завтра”
ідентичний до рядку:
“Один час сегодня стоит двух часов завтра”.
Адреса першого символа рядка може використовуватися по- різному:
- якщо рядок застосовується при ініціюванні масиву типу char, адреса його першого елемента стає синонімом імені масиву. Наприклад, ідентичними є такі описи масиву:
char st [ ] = “Слово”;
char st [6] = “Слово”;
char st [6] = {‘С’ ‘л’ ‘о’ ‘в’ ‘о’ ‘\0’}; - якщо рядок використовується для ініціювання покажчика типу char*, адресапершого символа рядка буде початковим значенням покажчика, наприклад:
char *pst = “Слово”;.
Тут описується змінна-покажчик pst, яка одержує початкове значення, що дорівнює адресі першого елемента (символа ‘С‘);
- якщо рядок використовується у виразі, що застосовує покажчик, то компілятор підставляє у вираз рядка адресу його першого символа, наприклад:
char *pst;
pst = “Первый символ”;.
Тут pst одержує адресу символа «П» (тобто першого символа рядка).
Слід звернути увагу на те, що при описі символьного масиву його ім’я — не змінна, а покажчик-константа на початок рядка, тому її не можна використовувати в деяких операціях адресної арифметики. Зокрема, не можна здійснювати операцію присвоювання вигляду:
char st [20];
st = “Петренко”; — запис неправильний, тому що не можна змінити значення st.
Виконання дій з елементами символьного масиву здійснюється через індекси або через покажчики. Для доступу до будь- якого символа рядка використовується індекс масиву char. Тобто, якщо описана змінна char str [3];, то третім елементом масиву можна скористатися, записавши: str [2] або *(str+2).
У процесі роботи з елементами двовимірного масиву застосовують або індекси масиву, або індекси покажчиків. Якщо описаний список прізвищ char spis [5] [15];, то для використання символа масиву слід записати: spis [і][j] або *(spis [і] + j).
Аналогічно, якщо оголошений масив покажчиків char *str [5], що містить 5 елементів, кожний з яких вказує на рядок, то доступ до символа рядка можна здійснити з використанням запису *(str [і] + j).