#include <string> template< class charT, class Traits > std::basic_istream< charT, Traits >& getline( std::basic_istream< charT, Traits >& in, std::basic_string< charT, Traits >& str ); template< class charT, class Traits > std::basic_istream< charT, Traits >& getline( std::basic_istream< charT, Traits >& in, std::basic_string< charT, Traits >& str, charT delim);
Reads characters from in input stream until delimiting character ('\n' or delim) is found and saves them to the given string str. If delimiter is found, it is discarded.
in - input stream to read from
str - string to store the read characters to
delim - delimiting character
in. Errors are signaled through in state flags.
The following code reads a line of text from stdin and displays it to stdout:
string s; getline( cin, s ); cout << "You entered " << s << endl;
After getting a line of data in a string, you may find that stringstreams are useful in extracting data from that string. For example, the following code reads numbers from standard input, ignoring any “commented” lines that begin with double slashes:
// expects either space-delimited numbers or lines that start with // two forward slashes (//) 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; } } }
When run with a user supplying input, the above code might produce this output:
// 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