Строка – это серия символов, сохраненная в расположенных последовательно байтах памяти. В С++ доступны два способа работы со строками.
1. Унаследован от С и часто называется строки в стиле С.
2. Основан на библиотечном классе string.
Идея серии символов, сохраняемых в последовательных байтах, предполагает хранение строки в массиве char, где каждый элемент содержится в отдельном элементе массива. Строки предоставляют удобный способ хранения текстовой информации, такой как сообщения для пользователя или его ответы.
Строке в стиле С обладают специальной характеристикой: последним в каждой такой строке является нулевой символ. Этот символ, записываемый как \0, предоставляет собой символ с ASCII-кодом 0, который служит меткой конца строки. Например:
char dog[8] = {‘b’, ‘r’, ‘e’, ‘u’, ‘x’, ‘ ’, ‘R’, ‘E’ }; // это не строка
Обе эти переменные представляют собой массивы char, но только вторая из них является строкой.
Нулевой символ играет фундаментальную роль в строках стиля С.
Например, в С++ имеется множество функций для обработки строк, включая те, что используются cout. Все они обрабатывают строки символ за символом до тех пор, пока не встретится нулевой символ.
Если вы просите объект cout отобразить такую строку, как cat из примера, он выводит первых семь символов, обнаруживает нулевой символ и останавливается.
Однако если вывести с помощью cout массив dog, который не является строкой, то выведуется 8 символов, и будет продолжать двигаться по помяти байт за байтом, интерпретируя каждый их них, как символ, подлежащий выводу, пока не встретит нулевой символ.
Поскольку нулевые символы, которые по сути представляют собой байты, содержащие нули, встречаются в помяти довольно часто, ошибка быстро обнаружится. Но не стоит трактовать нестроковые символьные массивы как строки.
Пример инициализации массива выглядит громоздким и утомительным – множество одиночных кавычек плюс необходимость следить и помнить о нулевом символе. Существует более простой способ инициализации массива с помощью строки.
Для этого просто используйте строку в двойных кавычнах, которая называется строковой константой или строковым литералом, как показано ниже:
char bird[11] = “Mr. Cheeps”;
// наличие символа \0 подразумевается
char fish[] = “Bubbles”;
// компилятор сам подсчитывает количество элементов
Строки в двойных кавычках всегда неявно включают ограничивающий нулевой символ, поэтому указывать его явно не требуется.
Средства ввода С++ предназначенные для чтения строки с клавиатуры в массив char автоматически добавляют завершающий нулевой символ.
Инициализация массива строкой.
Иногда строки могут оказаться слишком большими, чтобы удобно разместиться в одной строке кода. С++ позволяет выполнить конкатенацию строковых литералов – т.е. комбинировать две строки с двойными кавычками в одну. В действительности любые две строковые константы, разделенные только пробельным символом (пробелами, символами табуляции, символами новой строки), автоматически объединяются в одну. Таким образом, следующие три оператора вывода эквивалентны:
Первый символ второй строки немедленно следует за последним символом первой, не считая \0 в первой строке. Символ \0 из первой строки заменяется первым символом второй строки.