Язык программирования C++. Вводный курс


Дополнительные операторы ввода/вывода - часть 6


 

Строка #4 Прочитано символов: 51

me on shore, I thought I would sail about a little

 

Строка #5 Прочитано символов: 47

and see the watery part of the world.  It is a

 

Строка #6 Прочитано символов: 43

way I have of driving off the spleen, and

 

Строка #7 Прочитано символов: 28

regulating the circulation.

 

Всего прочитано строк: 7

Самая длинная строка: 51

Функция-член getline()

класса istream

поддерживает только ввод в массив символов. Однако в стандартной библиотеке есть обычная функция getline(), которая помещает символы в объект класса string:

getline( istream &is, string str, char delimiter );

Эта функция читает не более str::max_size()-1

символов. Если входная последовательность длиннее, то операция завершается неудачно и объект переводится в ошибочное состояние. В противном случае ввод прекращается, когда прочитан ограничитель (он удаляется из потока, но в строку не помещается) либо достигнут конец файла.

Вот еще три необходимые нам функции-члена класса istream:

// возвращает символ в поток

putback( char class );

 

// устанавливает "указатель на следующий символ потока istream на один символ назад

unget();

 

// возвращает следующий символ (или EOF),

// но не извлекает его из потока

peek();

Следующий фрагмент иллюстрирует использование некоторых из них:

char ch, next, lookahead;

 

while ( cin.get( ch ))

{

   switch (ch) {

   case '/':

      // это комментарий? посмотрим с помощью peek()

      // если да, пропустить остаток строки

      next = cin.peek();

      if ( next == '/' )

         cin.ignore( lineSize, '\n' );

      break;

   case '>':

      // проверка на лексему >>=

      next = cin.peek();

      if ( next == '>' ) {

         lookahead = cin.get();

         next = cin.peek();

         if ( next != '=' )

            cin.putback( lookahead );

         }

         // ...

}

Упражнение 20.4

Прочитайте из стандартного ввода следующую последовательность символов, включая все пустые, и скопируйте каждый символ на стандартный вывод (эхо-копирование):

a  b c

d     e

f

Упражнение 20.5

Прочитайте фразу “riverrun, from bend of bay to swerve of shore” сначала как последовательность из девяти строк, а затем как одну строку.

Упражнение 20.6

С помощью функций getline() и gcount()

прочитайте последовательность строк из стандартного ввода и найдите самую длинную (не забудьте, что строку, прочитанную за несколько обращений к getline(), нужно считать одной).




Начало  Назад  Вперед



Книжный магазин