2016-03-23 9 views
-2

Wie kann ich getline() verwenden, um Wörter aus einer Zeile zu lesen, die ich in einer Zeichenfolge gespeichert habe?Verwenden von getline auf einer Zeichenfolge

Zum Beispiel:

char ch[100],w[20]; 
cin.getline(ch,100); 

Jetzt kann ich getline verwenden, um die Anzahl der Wörter in ch zu zählen? Ich möchte kein Trennzeichen verwenden, um Wörter direkt von ch zu zählen. Ich möchte Wörter von ch lesen und sie in w speichern.

Ich habe versucht, ch in getline als Parameter zu verwenden.

+0

Ihr Titel ist falsch. – ZDF

Antwort

1

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 chstring s zu machen, damit sie dynamisch Benutzereingaben aufnehmen können die Größe.