Ввод и вывод строки
Еще одна особенность работы с символьными массивами – если элементы произвольного массива можно вводить с клавиатура и выводить на экран только по одному элементу в цикле, то в символьный массив можно ввести сразу всю строку, используя оператор ввода
cin >> Имя_массива;и, аналогичным образом, вывести сразу всю строку на экран, используя оператор вывода
cout << Имя_массива;Следует сразу отметить, что при вводе с клавиатуры строки оператор cin автоматически добавляет в конец строки нулевой символ, так что Вы должны учитывать этот факт при указании количества элементов при объявлении массива.
Например,
#include “iostream”using namespace std;void main(){ char str[31]; // объявление символьного массива cout<<"Enter a string (max 30 symbols):"; cin>>str; // ввод строки cout<<"\nYou enter string:"<<str; // вывод строки}Как видите, в данном примере, выделяется память под 31 символ, но пользователю в приглашении указывается, что он может ввести строку с размером максимум 30 символов, учитывая тот факт, что оператор cin добавит еще один нулевой символ в конец строки автоматически, и под него также необходимо предусмотреть выделение памяти. Далее после приглашения вводим сразу всю строку с клавиатуры в массив и затем с соответствующим сообщением выводим всю строку на экран монитора.
Второй способ определения строки - это использование указателя на символ. Объявление
char *b;задает переменную b, которая может содержать адрес некоторого объекта. Однако в данном случае компилятор не резервирует место для хранения символов и не инициализирует переменную b конкретным значением. Сделать это можно, например, присвоив b указатель на уже существующий символьный массив, или динамически выделить память под новый массив. Например,
#include ”iostream”using namespace std;void main(){ char str[] = "Здравствуй, мир!"; // объявляем символьный массив char *b; // объявляем указатель на символ b = &str[12]; // теперь b указывает на 12-ый символ str *b = 'M'; // присваиваем первому элементу b символ 'М' cout << b; // выводим строку b на экран (Мир!)}Итак, подведем итоги. Необходимо помнить:
1. Строку можно определить как массив символов или как указатель на символ.
2. Любая строка заканчивается нулевым символом. (Благодаря этому свойству Вы всегда можете определить конец строки, если у Вас строка занимает меньшее количество символов, чем то количество, которое было указано в квадратных скобках при объявлении массива).
3. Для строк возможна упрощенная начальная инициализация (в сравнении с не символьными массивами).
4. В символьный массив можно ввести сразу всю строку, используя оператор ввода cin>> Имя_массива;, и аналогичным образом вывести сразу всю строку на экран, используя оператор вывода cout<<Имя_массива;.