String-Einlesestreams dienen dem Zweck, eine Eingabe irgendwelcher Daten zu puffern. Das Einlesen verschiedener Daten erfolgt dabei vom Streampuffer. Es stehen Konvertierungs-Funktionen oder -Operatoren zur Verfügung. Damit können beim Einlesen Zeichenfolgen in grundlegende Typen wie char, int, float, double konvertiert werden. Mithilfe des vielfach überladenen Einleseoperators ">>" können sehr bequem Daten hintereinander vom Puffer eines String-Einlesestreams gelesen werden.

Üblicherweise wird dem Stream mit Hilfe der Methode str() oder gleich beim Konstruieren eine Zeichenkette zugeordnet. Anschließend kann man aus dem Einlesestream (also der Zeichenkette) per Einleseoperator ">>" nacheinander verschiedene Daten lesen und Variablen zuweisen. Ein String-Einlesestream der Standardbibliothek arbeitet mit dem string-Typ derselben Bibliothek.

Diejenige Klasse, die mit "Zeichen vom Typ char" arbeitet, heißt istringstream. Sie ist auf der Basis des Templates basic_istringstream definiert.

typedef basic_istringstream<char> istringstream;
Wenn Sie sich für weitere Informationen zu istringstream interessieren, müssen Sie also unter basic_istringstream suchen.

basic_istringstream ist von basic_istream abgeleitet. Die meisten hilfreichen Elementfunktionen werden Sie bei basic_istream finden. Die Klasse des bekannten Konsole-Einlesestreams cin ist istream, die ebenfalls auf dem Template basic_istream basiert. Somit können Sie alle Methoden, die für cin existieren, auch mit einem istringstream-Objekt verwenden. Eine interessante Methode ist getline(), mit der nullterminierte C-Strings sehr funktionstüchtig eingelesen werden können.

Die Beschreibungsdatei für String-Einleseströme ist <sstream> (von string stream). Wenn Sie string-Objekte verwenden wollen, benötigen Sie auch die string-Beschreibungsdatei <string>. Namensraum std nicht vergessen!

Beispiel:

#include <sstream>
using namespace std;

int main()
{
 istringstream iss("Stringtext 123 3.14159\n");
 string s;
 long int i;
 double f;
 iss >> s >> i >> f;
 cout << s << '\t' << i << '\t' << f << endl;

 iss.str("Anderer Text\n987Einen Text hab ich noch.\t2.71828\n");
 char cs1[81], cs2[81];
 (iss.getline(cs1,81) >> i).getline(cs2,81,'\t') >> f;
 cout << cs << '\t' << i << '\t' << cs2 << '\t' << f << endl;
 return 0;
}
Ausgaben:
Stringtext       123    3.14159
Anderer Text     987    Einen Text hab ich noch.       2.71828

Sie sehen, dass Sie einem String-Einlesestream Daten ebenso entnehmen können wie dem Objekt cin. Die Ausgabe per cout dient hier nur der Überprüfung. Normalerweise wird eine Applikation die eingelesenen Daten verarbeiten.

Analysieren Sie 'mal die Zeile mit getline()! Die beiden Prototypen von getline() lauten sinngemäß:

istream& getline(char* str, streamsize maxZeichen);
istream& getline(char* str, streamsize maxZeichen, char Begrenzungszeichen);