Синтаксис:
#include <string> istream& std::getline( istream& is, string& s ); istream& std::getline( istream& is, string& s, charT delimiter );
Заголовочный файл C++ string описывает глобальную функцию getline(), которая читает строки из потока ввода/вывода. Функция getline(),не являющаяся членом класса string, считывает строку и помещает ее в переменную s. Если определен ограничитель по размеру строки, то getline() сможет использовать этот ограничитель, чтобы остановить считывание данных. Если ограничителя нет, производится следующий вызов функции:
return getline( is, s, is.widen( '\n' ) );
Обратите внимание: istream - это поток ввода типа basic_istream<charT>, в соответствии с типом символа.
Например, следующий код считывает строку текста из stdin и выводит ее в stdout:
string s; getline( cin, s ); cout << "You entered " << s << endl;
После получения набора данных в виде строки, вы можете обнаружить, что строковые потоки пригодны для извлечения данных из строки. Например, следующий код считывает числа из стандартного потока ввода, игнорируя все «прокоментированные» строки, начинающиеся с двойного слэша:
// ожидается либо ввод разделенных пробелом чисел, либо строк, // начинающихся с двойного слэша (//) string s; while( getline(cin,s) ) { if( s.size() >= 2 && s[0] == '/' && s[1] == '/' ) { cout << " ignoring comment: " << s << endl; } else { istringstream ss(s); double d; while( ss >> d ) { cout << " got a number: " << d << endl; } } }
При использованнии кода с пользовательским потоком ввода, этот код выводит:
// test
ignoring comment: // test
23.3 -1 3.14159
got a number: 23.3
got a number: -1
got a number: 3.14159
// next batch
ignoring comment: // next batch
1 2 3 4 5
got a number: 1
got a number: 2
got a number: 3
got a number: 4
got a number: 5
50
got a number: 50
Так как функция getline() начинает чтение с текущей позиции в файле, она может быть так же использована для чтения остатка строки, или некоторого количества символов до определенного ограничителя.
Смотрите также: get, getline, stringstream