2017-02-18 5 views
1

Wie soll ich Zeilen mit space s aus einem file.txt lesen und in meinem vector aufzeichnen? Ich habe eine Linie, die von vielen Wörtern besteht, aber meine Schleife sehen nicht, dass und sie eins nach dem anderen und drucken auf diese Weise lesen:Eine Datei lesen .txt C++

Zum Beispiel, ich habe eine Zeichenfolge in einer Datei:

Hello, my friends,how are you? 

Hello,James, we are fine. 

Und in meiner Konsole, ich sehe:

Hello, 
my 
friends 
.... 
fine 

Diese meine Schleife:

while(rRecord»str) 
{ 
    lines.push_back(str); 
} 

Und meine Funktion, druckt meine Worte:

void printRecord(int& numStr,struct winsize w,std::vector<std::string>& lines) 
{ 

for (int i = numStr; i < numStr + w.winsize::ws_row-1; i++) 
{ 

    if (i>=lines.size()) 
    break; 
    else 
    std::cout « lines[i] « std::endl; 

} 

    numStr += w.winsize::ws_row; 
} 
+0

Wie wäre es mit 'std :: getline()'? –

Antwort

0

line-by-line zu lesen, verwenden std::getline, wie folgt aus:

std::string line; 
while (std::getline(inFile, line)) { 
    lineVector.push_back(std::move(line)); 
} 

Die std::move bedeutet, dass, wenn das vector das neue Element erstellt, kann es "stehlen" den internen Puffer von line, was bedeutet, dass line jetzt eine leere Zeichenfolge ist, aber eine zusätzliche Zuordnung + Kopie speichert.


Beachten Sie, dass getline mit >> Mischen ist in der Regel keine gute Idee, weil >> jede nachfolgende Leerzeichen verlassen, eine neue Zeile darunter, in dem Strom, was bedeutet, zu unerwarteten Ergebnissen führen Sie das nächste Mal zu getline versuchen zu bekommen.

+0

Danke für die Antwort, versuchen Sie es zu verwenden –

+1

Der 'std :: move' Anruf sieht viel wie vorzeitige Optimierung aus. –