Когда на вход было подано
while (cin.getline( inBuf, lineSize ))
{
// сколько символов фактически прочитано
int readin = cin.gcount();
// статистика: счетчик строк, самая длинная строка
++lcnt;
if ( readin > max )
max = readin;
cout << "Строка #" << lcnt
<< "\tПрочитано символов: " << readin << endl;
cout.write( inBuf, readin).put('\n').put('\n');
}
cout << "Всего прочитано строк: " << lcnt << endl;
cout << "Самая длинная строка: " << max << endl;
}
Когда на вход было подано несколько фраз из романа Германа Мелвилла “Моби Дик”, программа напечатала следующее:
Строка #1 Прочитано символов: 45
Call me Ishmael. Some years ago, never mind
Строка #2 Прочитано символов: 46
how long precisely, having little or no money
Строка #3 Прочитано символов: 48
in my purse, and nothing particular to interest
Строка #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 символов. Если входная последовательность длиннее, то операция завершается неудачно и объект переводится в ошибочное состояние. В противном случае ввод прекращается, когда прочитан ограничитель (он удаляется из потока, но в строку не помещается) либо достигнут конец файла.
Содержание Назад Вперед