getline
ist in der Norm entweder als a stream method oder eine string
Methode implementiert, die einen Strom nimmt: http://en.cppreference.com/w/cpp/string/basic_string/getline
Es gibt keine Standard-Implementierung von getline
, die keinen Strom benötigt.
Das heißt Sie ch
verwenden können istringstream
Saatgut die Worte in der Zeichenfolge zu zählen, aber basic_istream<CharT, Traits>& getline(basic_istream<CharT, Traits>&& input, basic_string<CharT, Traits, Allocator>& str)
übernimmt eine neue Zeile als Trennzeichen, so dass nicht das, was Sie wollen gehst Wörter zu zählen. In ähnlicher Weise wird eine getline
, die ein Trennzeichen verwendet, nur bei einem bestimmten Zeichen unterbrochen. Stattdessen könnten Sie basic_istream& basic_istream::operator>>
verwenden, welche Wörter auf alle Leerzeichen aufgespalten wird:
istringstream foo(ch);
for(auto i = 1; foo >> w; ++i) {
cout << i << ": " << w << endl;
}
Live Example
Nur als Anmerkung hier char w[20]
definiert, ist nur Betteln für einen außerhalb der Grenzen schreiben. Sie müssen mindestens so definieren, dass ch
mit Leerzeichen gefüllt wird, w
alles enthalten kann. Sie könnten das tun, indem Sie char w[100]
definieren.
Aber wenn jemand kommen würde und vergrößern Sie die Größe von ch
ohne die Größe von w
zu ändern und dann würden Sie wieder in Schwierigkeiten geraten. In C++ 17 könnten Sie w
wie diese char w[size(ch)]
vor, dass definieren Sie char w[sizeof(ch)/sizeof(ch[0])]
Aber die beste Wahl tun könnte, ist wahrscheinlich nur die beiden w
und ch
string
s zu machen, damit sie dynamisch Benutzereingaben aufnehmen können die Größe.
Ihr Titel ist falsch. – ZDF