Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Lek11.doc
Скачиваний:
14
Добавлен:
15.11.2018
Размер:
139.78 Кб
Скачать

11.4. Строки с как аргументы и параметры

Строковая переменная С — это массив, поэтому когда она используется как параметр функции, тип данного параметра является типом массива. Функция может изменять значение строковой переменной так же, как значение любого другого параметра типа массива, поэтому вместе с ней обычно передается дополнительный аргумент типа int, в котором задается объявленный размер этой строковой переменной.

Если же функция использует значение строкового аргумента С, не изменяя его, допол­нительный аргумент (в котором задавался бы объявленный размер массива или коли­чество его заполненных элементов) не нужен. Конец строкового значения, хранящего­ся в строковой переменной С, отмечает нуль-символ '\0'.

11.5. Ввод и вывод строк с

Строки С можно выводить с помощью оператора вывода <<. Фактически мы уже делали это для литеральных строк, заключенных в двойные кавычки. Точно так же можно использовать и строковые переменные. Например: cout << news << " Wow.\n";

Здесь news — строковая переменная С.

Строковые переменные С можно заполнять, используя оператор ввода >>, но нуж­но иметь в виду одно обстоятельство: как и для других типов данных, при вводе строк С пропускаются символы пробела, табуляции и перевода строки. Более того, на очередном из перечисленных символов процесс чтения входных данных останавливается. Рассмотрим следующий код:

char а[80], b[80];

cout « "Enter some input:\n";

cin » a » b;

cout « a « b « "END OF OUTPUT\n";

Если выполнить его в составе программы C++, получится примерно такой диалог:

Enter some input:

Do be do to you!

DobeEND OF OUTPUT

В строковые переменные а и b введенный текст добавляется по словам: в а поме­щается строка "Do", поскольку за ней следует пробел, а в b помещается строка "be", за которой тоже введен пробел.

Если вы хотите, чтобы программа прочитала всю строку с символами пробела и табуляции, то можно прочитать ее по частям с помощью оператора ввода >>, а потом собрать в единое целое. Но это, во-первых, утомительно, а во-вторых, вы не сможете различить символы пробела и табуляции и не будете знать их количе­ства. Гораздо проще и надежнее воспользоваться стандартной функцией-членом getline, включенной в любой входной потоковый объект: и в cin, и во входной файловый поток. У функции getline есть два аргумента. Первым является стро­ковая переменная, в которую вводятся данные, а вторым — целое число, обычно задающее объявленный размер строковой переменной. Функция интерпретирует второй аргумент как максимальное количество элементов, заданных в первом ар­гументе массива, которые можно заполнить символами. В качестве примера рас­смотрим следующий код:

char a[80];

cout << "Enter some input:\n";

cin.getline(a, 80);

cout << a << "END OF OUTPUT\n";

При выполнении его в составе полной программы можно получить такой диалог:

Enter some input:

Do be do to you!

Do be do to you!END OF OUTPUT

Функция cin.getline считывает всю строку. Чтение закончится, когда будет дос­тигнут конец строки, даже если она короче принимающей переменной. Рассмот­рим такой программный код:

char short_string[5];

cout << "Enter some input:\n";

cin.getline(short_string, 5);

cout << short_string << "END OF OUTPUT\n";

ри выполнении его в составе полной программы можно получить приведенный ниже диалог.

Enter some input: dobedowap

dobeEND OF OUTPUT

Обратите внимание, что в строковую переменную short_string прочитаны четы­ре, а не пять символов, хотя вторым аргументом функции передано значение 5. Дело в том, что один элемент массива занят символом '\0'. Вы уже знаете, что им завершается каждая строка С и он всегда занимает один элемент массива.

Технологии ввода и вывода строк С посредством потоковых объектов cin и cout применимы и к файловым потоковым объектам. Входной поток cin можно заме­нить входным потоковым объектом, подключенным к файлу, а выходной поток cout можно заменить выходным потоковым объектом, подключенным к файлу. (О файловом вводе-выводе расскажу в лекции 16.)

Функция getline

Функция-член потоковых объектов getl ine может использоваться для чтения входной

строки и помещения ее в строковую переменную С.

Синтаксис

входной_поток.getline(строковая_переменная. максимальное_количество_символов + 1);

Из потока входной_поток считывается одна строка символов и помещается в перемен­ную строковая_переменная. Если размер строки превышает максимальное_количество_симво-лов, будет прочитана только ее начальная часть, равная по длине этому значению. (Единица прибавляется, так как каждая строка С содержит нуль-символ '\0', отме­чающий ее конец, и поэтому строка в переменной строковая_переменная на единицу длиннее прочитанной строки.)

Пример

char one_line[80]; cin.getline(one_line, 80);

(Точно так же можно вводить данные из входного потока, подключенного к файлу.)

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]