Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ БЮДЖЕТНОЕ ОБРАЗОВАТ...docx
Скачиваний:
12
Добавлен:
21.09.2019
Размер:
695.51 Кб
Скачать

5. Символьные строки

Во '70{многих уже рассматривавшихся программах для вывода на экран

часто использовались символьные строки, например, ""Введите возраст:"". В

Си++ строки хранятся и обрабатываются в виде символьных массивов, на

которые накладывается дополнительное ограничение (см. п.5.1).

5.1 Завершающий нуль-символ '\0'

Символьный массив для хранения строки должен иметь длину на 1

символ больше, чем длина строки. В последнем элементе массива

хранится специальный нуль-символ (символ с кодом 0, часто обозначается

'\0'). Этот служебный символ обозначает конец строки, и это общепринятое

правило представления строк, которое соблюдают все библиотечные

функции для работы со строками.

5.2 Объявление и инициализация символьных строк

Символьные (строки описываются как обычные массивы:

char phrase[17];

Массивы можно полностью или частично проинициализировать

непосредственно в операторе описания. Список значений элементов

массива заключается в фигурные скобки "{}" (это правило верно для любых

массивов, а не только для символьных). Например, оператор

char phrase[17] = { 'В','в','е','д','и','т','е',' ',

'в','о','з','р','а','с','т',

':', '\0' };

одновременно и объявляет массив "phrase", и присваивает его элементам

значения.То же самое делает оператор:

char phrase[17] = "Введите возраст:";

Если не указывать размер "17", то размер массива будет выбран в

соответствии с количеством инициализирующих значений (с учетом

завершающего нуль-символа). Т.е. строку можно описать с помощью

любого из двух следующих операторов:

char phrase[] = { 'В','в','е','д','и','т','е',' ',

'в','о','з','р','а','с','т',

':', '\0' };

char phrase[] = "Введите возраст:";

Очень важно запомнить, что символьные строки хранятся в виде

массивов. Поэтому их нельзя приравнивать и сравнивать с помощью

операций "=" и "==". Например, нельзя записать оператор присваивания:

phrase = "Вы напечатали строку:";

Для копирования и сравнения строк следует применять специальные

библиотечные функции.

5.3 Библиотечные функции для работы с символьными строками

В стандартном библиотечном файле "string.h" хранятся прототипы

большого количества полезных функций для обработки символьных строк.

Будем полагать, что в рассматриваемые далее программы этот

заголовочный файл включается с помощью директивы препроцессора:

#include <string.h>

Если в программе есть строковая переменная "a_string", то скопировать

в нее содержимое другой строки можно с помощью функции "strcpy(...)":

strcpy( a_string, "Вы напечатали строку:" );

Этот оператор скопирует в массив a_string символы константной строки

""Вы напечатали строку:"" и добавит в конец массива (т.е. присвоит 21-му

элементу) завершающий нуль-символ "'\0'". Вызов оператора

strcpy( a_string, another_string );

приведет к копированию строки, хранящейся в массиве "another_string", в

массив "a_string". При копировании строк важно, чтобы длина массива-

приемника ("a_string") была, как минимум, (L+1), где L – длина копируемой

строки ("another_string"). В противном случае вызов функции приведет к

ошибке выхода за пределы массива, которая не обнаруживается

компилятором, но может привести к серьезным сбоям во время выполнения

программы.

Для вычисления длины строки предназначена функция "strlen(...)".

Вызов "strlen(another_string)" возвращает длину строки "another_string" (без учета

нуль-символа).

Функция "strcmp(...)" выполняет сравнение двух переданных ей строк.

Если строки одинаковы, то эта функция возвратит 0 (т.е. "false"), а если

строки различаются, то функция возвратит ненулевое значение.

Функция конкатенации (соединения) строк "strcat(...)" получает два

параметра-строки и копирует вторую строку в конец первой. При работе с

"strcat(...)", как и с функцией "strcpy(...)", надо обязательно следить за размером

массива-приемника. Си++ не проверяет, достаточен ли размер первого

массива, переданного этой функции, для хранения соединенных строк. При

малом размере массива произойдет необнаруживаемая на этапе

компиляции ошибка выхода за границы массива.

Работа с библиотечными строковыми функциями

продемонстрирована в программе 5.1.