Иногда необходимо прочитать из входного потока последовательность не интерпретируемых байтов, а типов данных, таких, как char, int, string и т.д. Функция-член get() класса istream читает по одному байту, а функция getline() читает строку, завершающуюся либо символом перехода на новую строку, либо каким-то иным символом, определяемым пользователем. У функции-члена get() есть три формы:
#include <iostream>
int main()
{
char ch;
int tab_cnt = 0, nl_cnt = 0, space_cnt = 0,
period_cnt = 0, comma_cnt = 0;
while ( cin.get(ch)) {
switch( ch ) {
case ' ': space_cnt++; break;
case '\t': tab_cnt++; break;
case '\n': nl_cnt++; break;
case '.': period_cnt++; break;
case ',': comma_cnt++; break;
}
cout.put(ch);
}
cout << "\nнаша статистика:\n\t"
<< "пробелов: " << space_cnt << '\t'
<< "символов новой строки: " << nl_cnt << '\t'
<< "табуляций: " << tab_cnt << "\n\t"
<< "точек: " << period_cnt << '\t'
<< "запятых: " << comma_cnt << endl;
}
Функция-член put() класса ostream дает альтернативный метод вывода символа в выходной поток: put() принимает аргумент типа char и возвращает объект класса ostream, для которого была вызвана.
После компиляции и запуска программа печатает следующий результат:
Alice Emma has long flowing red hair. Her Daddy says
when the wind blows through her hair, it looks almost alive,