Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
A.doc
Скачиваний:
36
Добавлен:
09.04.2015
Размер:
5.6 Mб
Скачать

165 Глава 4

Вы можете также опустить размер массива числового типа, если указываете спи- сок значений инициализации. Количество элементов в массиве определяется количе- ством указанных инициирующих значений. Например, объявление массива:

определяет массив из трех элементов с начальными значениями 2, 3 и 4.

Символьные массивы и обработка строк

Массив типа char называется символьным массивом и обычно используется для хранения символьных строк. Символьная строка — это последовательность символов, дополненная специальным символом-ограничителем, указывающим конец строки. Ограничивающий строку символ записывается управляющей последовательностью ' \01, и иногда его называют нулевым символом, поскольку он представлен байтом, в котором все биты равны 0. Строки, организованные подобным образом, часто назы- вают строками в стиле С, поскольку такое определение строк впервые было представ- лено в языке С, на основе которого Бьерн Страуструп разработал язык С++. Это не единственное представление строк, которое вы можете использовать; позднее в этой книге вы познакомитесь и с другими. В частности, программы C++/CLI используют другое представление строк, а библиотека MFC определяет класс С St ring для пред- ставления строк.

Представление строки в стиле С в памяти показано на рис. 4.2.

На рис. 4.2 можно видеть, как выглядит строка в памяти, и показана форма объяв- ления строки, которую мы вскоре рассмотрим.

Каждый символ в строке занимает один байт, поэтому вместе с ограничивающим нулевым символом строке необходимо количество байт, на единицу превышающее количество симво- лов в ней.

Вы можете объявить символьный массив и инициализировать его строчным лите- ралом, например:

Обратите внимание, что ограничивающий символ '\0' добавляется компилято- ром автоматически. Если вы включите его в строчный литерал явно, то у вас будет два нулевых символа. Однако вы должны учитывать место для нулевого символа, ког- да определяете необходимое количество элементов для символьного массива.

Вы можете позволить компилятору определить длину инициализированного мас- сива самостоятельно, как вы видели на рис. 4.1. Вот другой пример:

Массивы, строки и указатели 166

Поскольку размер не указан, компилятор выделяет пространство, достаточное для размещения инициализирующей строки, плюс ограничивающий нулевой символ. В данном случае он выделит 14 элементов для массива president. Конечно, если вы хотите использовать данный массив позднее для хранения другой строки, ее длина (включая нулевой символ-ограничитель) не должна превышать 14 байт. В общем слу- чае на вас ложится ответственность обеспечить достаточный размер массива, чтобы в него поместилась любая строка, которую вы в последствии захотите в нее поместить.

Строковый ввод

Заголовочный файл <iostream> содержит определения множества функций для чтения символов с клавиатуры. Одну их них мы рассмотрим здесь. Это — функция get line (), которая читает последовательность вводимых с клавиатуры символов и помещает ее в символьный массив в виде строки с ограничивающим нулем \0. Обычно вы будете использовать функцию getline () в операторах вроде следующего:

В этом фрагменте сначала объявляется массив char размером в МАХ элементов, а затем в него читается строка из cin с помощью функции getline (). Источник данных — cin — записывается так, как показано, с точкой, отделяющей его от име- ни функции. Что именно означают аргументы функции getline (), можно видеть на рис. 4.3.

Поскольку последний аргумент, переданный функции getline () — это ' \п' (сим- вол новой строки), а второй аргумент — МАХ, символы читаются из cin до тех пор, пока не будут прочитан символ '\n', или когда будет прочитано МАХ-1 символов — в зависимости от того, что произойдет раньше. Максимальное количество прочитан- ных символов равно МАХ-1, чтобы позволить дописать символ-ограничитель '\0' к последовательности символов, сохраняемых в массиве. Символ '\n' генерируется, когда вы нажимаете клавишу <Enter> на клавиатуре, а потому это — наиболее удобный символ для завершения ввода. Однако вы можете указать какой-то другой символ в качестве признака завершения ввода, изменив последний аргумент. Символ '\n' не сохраняется во входном массиве name, но как уже было сказано, в конец введенной строки, помещенной в массив, добавляется '\0'.