Archiv verlassen und diese Seite im Standarddesign anzeigen : c++ string zeilenweise lesen
Russel-Athletic
22-01-2006, 22:05
Ich hab in c++ einen großen String jeweils mit \n getrennt, wie kann ich den am besten Zeilenweise einlesen?
Mein aktueller Versuch sieht so aus, bescheert mir aber einen segfault.
string analyzefine(string * buffer)
string resbuff;
string locbuff= *buffer;
while(!locbuff.empty())
{
string akt= string(locbuff,0,locbuff.find('\n'));
mache dieses und jenes
}
locbuff= string(locbuff,locbuff.find('\n')+1,locbuff.length ());
}
peschmae
23-01-2006, 08:12
Am einfachsten geht das wohl mit einem Stringstream; daraus kannst du dann genau wie das auch bei std::cin funktioniert zeilenweise einlesen.
MfG Peschmä
Verwende die Funktion getline(inputstream,string):
http://gcc.gnu.org/onlinedocs/libstdc++/latest-doxygen/namespacestd.html#a645
Russel-Athletic
23-01-2006, 14:57
Von Stringstream höre ich jetzt zum ersten mal.
Hat jemand zufällig ein paar Funktionen dafür (besonders das reinschreiben) aufzählen oder einen Link geben?
Mit google finde ich nämlich nur was zu file streams.
locus vivendi
23-01-2006, 17:33
Von Stringstream höre ich jetzt zum ersten mal.
Hat jemand zufällig ein paar Funktionen dafür (besonders das reinschreiben) aufzählen oder einen Link geben?
Ja. Z.b.
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vcstdlib/html/vclrf_sstream_basicstringstream_class.asp
http://www.dinkumware.com/manuals/reader.aspx?b=p/&h=sstream.html
Mit google finde ich nämlich nur was zu file streams.
Das überrascht mich stark. Ich finde auf der ersten Ergebnisseite bereits den Link zu Microsofts Dokumentation.
Es ist auch gerade ein Grund für die Existenz von C++ Iostreams, dass du *nicht* extra lernen musst, wie man in einen Filestream und wie in einen Stringstream schreibt. Das geht beides mal, im Prinzip, auf die gleiche Weise.
Russel-Athletic
23-01-2006, 18:12
Irgendwie geht noch nicht die Erleuchtung bei mir auf. Besonders da ich vermute, dass das ein Template ist.
Könnte jemand bitte kurz einen Beispiel Code produzieren? Mit Header und allem.
Danke schonmal im vorraus.
locus vivendi
23-01-2006, 19:43
Irgendwie geht noch nicht die Erleuchtung bei mir auf. Besonders da ich vermute, dass das ein Template ist.
Ja und nein, wenn man von Stringstream spricht kann eigentlich sowohl ein Template als auch keines gemeint sein.
"std::stringstream" ist z.B. kein Template, aber "std::basic_stringstream" ist eines. std::stringstream ist nämlich die Spezialisierung von std::basic_stringstream, welche durch "typedef basic_stringstream<char> stringstream;" definiert ist. Das ist soweit übrigens alles der MSDN-Doku zu entnehmen.
Könnte jemand bitte kurz einen Beispiel Code produzieren? Mit Header und allem.
Ja, könnte ich. Aber wenn du die Forensuche benutzt, findest du sowas bereits. Z. b. im Topic "[C++] int to string".
Hier nochmal meine beiden Standard-Links:
http://www.icce.rug.nl/documents/cpp.shtml (Die C++-Annotations, eine Art Tuturial, hat auch etwas zu Iostreams)
http://www.parashift.com (Die C++ FAQ Lite von Marshall Cline)
Eine gutes Buch ist natürlich auch nicht zu verachten.
Powered by vBulletin® Version 4.2.5 Copyright ©2025 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.