Типы данных в языке C++__________________________________673

12.4 Типы строк
12.4.1 Массивы символов

В C++ отсутствует специальный тип строк. Строки рассматриваются как мас-
сивы символов, оканчивающиеся нулевым символом ('\0'). Строка доступна через
указатель на первый символ в строке. Значением строки является адрес ее первого
символа. Таким образом можно сказать, что в C++ строка является указателем —
указателем на первый символ строки. В этом смысле строки подобны массивам,
потому что массив тоже является указателем на свой первый элемент. Подробно о
работе с массивами символов см. в разделе 12.10.1, посвященном массивам.

Строка может быть объявлена либо как массив символов, либо как перемен-
ная типа char*. Каждое-из двух приведенных ниже эквивалентных объявлений

char S[] = "строка";

char *Sp = "строка";

присваивает строковой переменной начальное значение «строка». Первое объяв-
ление создает массив из 7 элементов S содержащий символы "с", "т", 'р', 'о', "к", 'а'
и '\0'. Второе объявление создает переменную указатель Sp, который указывает
на строку с текстом «строка», лежащую где-то в памяти. Но в любом случае число
хранимых символов на 1 больше числа значащих символов за счет оконечного ну-
левого символа.

Доступ к отдельным символам строки осуществляется по индексам, начинаю-
щимся с нуля. Например, S[0] и Sp[0] — первые символы объявленных выше
строк, S[1] и Sp[l] — вторые и т.д.

В приведенных объявлениях длина строк определялась автоматически компи-
лятором. Можно объявлять строковые переменные заданной длины. Например,
оператор

char buff[100] ;

объявляет переменную buff, которая может содержать строку до 99 значащих сим-
волов плюс заключительный нулевой символ.

Для обработки строк имеется ряд библиотечных функций. Основные из них
strcat — конкатенация (склеивание) двух строк, strcmp — сравнение двух строк,
strcpy — копирование одной строки в другую, strstr — поиск в строке заданной
подстроки, strlen — определение длины строки, strupr — преобразование симво-
лов строки к верхнему регистру, sprintf — построение строки по заданной строке
форматирования и списку аргументов и ряд других функций. Все они подробно
рассмотрены в главе 14 в разделе 14.11. А пока рассмотрим несколько примеров
их применения.

Начнем с самого простого. Выше было приведено объявление массива симво-
лов buff. Как занести в него какой-то текст? Это можно сделать с помощью функ-
ции strcpy:

strcpy(buff,"Текст, копируемый в buff");

Эта функция копирует строку, являющуюся ее вторым параметром, в строку,
являющуюся первым параметром и возвращает указатель на результат копирова-
ния.

Теперь решим задачу посложнее. Пусть, например, мы хотим прибавить в ко-
нец текста строки S1 текст, хранящийся в строке S2. Это можно сделать с помо-
щью функции strcat:

char SI [20] = "текст I", S2[10] = "текст 2";

strcat(S1,S2) ;

22 Зах.764