Читайте также:
|
|
1. Не выделяется достаточно места в массиве символов для хранения нулевого символа, завершающего строку.
2. Создание или использование "строки", которая не содержит завершающего нулевого символа.
3. Путаница в символьные и строковые константы.
Символьная константа – это один символ, заключенный в апострофы, например: 'A' или '\n'. Строковая константа – это последовательность символов, заключенная в двойные кавычки. В числе символов строки могут находиться любые символьные константы, например, "Visual C++\n" состоит из следующих символов: 'V', 'i', 's', 'u', 'a', 'l', ' ', 'C', '+', '+', '\n', '\0'. Таким образом, "A" – это строковая константа и состоит из двух символов: 'A' и '\0'. Соседние строковые константы транслятором "склеиваются", например: "АБВ" "ГДЕ" означает то же, что "АБВГДЕ".
Пример 1.
//Задана строка, скопировать ее в символьный массив. # include < iostream. h > void main (){/* объявляем символьный массив str1 и инициализируем его */ char str 1[]="1234567890", str 2[11]; // объявляем символьный массив без инициализации/* в цикле, пока не встретится конец строки присваиваем текущему элементу массива str2 символ из массива str1 */ for (int i =0; str 1[ i ]!='\0'; i ++) str 2[ i ]= str 1[ i ]; str2 [ i ] = '\0'; // копируем ноль-символ в str2. cout << str 2<<'\n'; // вывод строки на экран}Обратите внимание, выход из цикла происходит, когда str 1[ i ] равно ноль-символу, т.е. ноль-символ не копируется в str 2, следовательно, это нужно сделать за циклом.
Еще одна особенность работы с символьными массивами – если элементы произвольного массива можно вводить с клавиатуры и выводить на экран только по одному элементу в цикле, то в символьный массив можно ввести сразу всю строку, используя оператор ввода
cin >>Имя_массива;
и, аналогичным образом, вывести сразу всю строку на экран, используя оператор вывода
cout <<Имя_массива;
Следует сразу отметить, что при вводе с клавиатуры строки оператор cin автоматически добавляет в конец строки нулевой символ, так что необходимо учитывать этот факт при указании количества элементов при объявлении массива.
Пример 2.
# include < iostream. h > void main (){ char str [31]; // объявление символьного массива cout <<"Vvedite stroky (max 30 symvolov):"; cin >> str; // ввод строки cout <<"\nVu vveli stroky:"<< str; // вывод строки}Как видно, в данном примере выделяется память под 31 символ, но пользователю в приглашении указывается, что он может ввести строку с размером максимум 30 символов, учитывая тот факт, что оператор cin добавит еще один нулевой символ в конец строки автоматически, и под него также необходимо предусмотреть выделение памяти. Далее после приглашения вводим сразу всю строку с клавиатуры в массив и затем с соответствующим сообщением выводим всю строку на экран монитора.
Второй способ определения строки – это использование указателя на символ. Объявление char * b; задает переменную b, которая может содержать адрес некоторого объекта. Однако в данном случае компилятор не резервирует место для хранения символов и не инициализирует переменную b конкретным значением. Сделать это можно, например, присвоив b указатель на уже существующий символьный массив, или динамически выделить память под новый массив.
Пример 3.
# include < iostream. h > void main (){ char str []="Здравствуй, мир!"; // объявляем символьный массив char * b; // объявляем указатель на символ b =& str [12]; // теперь b указывает на 12-ый символ str* b ='M'; // присваиваем первому элементу b символ 'М' cout << b; // выводим строку b на экран (Мир!)}Итак, подведем итоги.
Дата добавления: 2014-12-15; просмотров: 118 | Поможем написать вашу работу | Нарушение авторских прав |