getline
Sintaxe:
#include <string> istream& std::getline( istream& is, string& s ); istream& std::getline( istream& is, string& s, charT delimiter );
O header string do C++ define a função global getline() para ler strings de um stream E/S (I/O stream). A função getline(), que não é parte da classe string, lê uma linha tal como escrita e guarda-a em s. Se um caracter de delimitação for especificado, então getline() usará delimiter para decidir quando deve parar de ler dados. Caso contrário, invoque a segunda forma como se segue:
return getline( is, s, is.widen( '\n' ) );
NOTA: istream é o tipo istream basic_istream<charT> de acordo com o tipo de caracter.
Por exemplo, o código seguinte lê uma linha de texto de stdin e mostra-a em stdout:
string s; getline( cin, s ); cout << "You entered " << s << endl;
Depois de guardar uma linha de dados numa string, pode ver que stringstreams são úteis em extrair dados dessa string. Por exemplo, o código seguinte lê números da entrada standard (standard input), ignorando quaisquer linhas "comentadas" que começam com duas barras:
// espera números delimitados por espaços ou linhas que começam com // duas barras (//) 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; } } }
Quando executado com um utilizador a fornecer a entrada, o código acima pode produzir a seguinte saída:
'' 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: 50Uma vez que a função getline() começa a ler na posição actual do ficheiro, também pode ser usada para ler o resto de uma linha, ou quaisquer caracteres até ao delimitador especificado.
Tópicos Relacionados: br-pt/io/get, br-pt/io/getline, stringstream

