snoopysalive
Mitglied
Hallo!
Eine weitere C++-Frage: Wie konkateniert man std::string-Strings in angemessener Zeit?
Mein Problem:
Ich will eine Textdatei aus über 150.000 Zeilen durchlaufen. Die Datei besteht aus HTML-Texten, welche durch eindeutige Separatoren voneinander getrennt sind. Bei der Abarbeitung werden die einzelnen Zeilen einer Homepage in einen String-Vector gesteckt und sollen anschließend zu einer einzigen Zeile in einen String zusammengesetzt werden. Erraten: Ich will sowas ähnliches wie eine join-Funktion schreiben.
Nachdem mir Google bis jetzt noch keine Antwort darauf liefern konnte, ob es eine join-Funktion in C++ gibt, wende ich mich nun an euch. Gibt es eine join-Funktion in C++? Wenn nicht, wie implementiere ich die, ohne dass mein Programm langsamer als jedes Perl-Skript wird? Hier mal meine rudimentäre join-Funktion:
Die String-Konkatenation im Inneren der for-Schleife bremst das Programm aber extremst aus. Kommentiere ich die Konkatenation aus, läuft das Programm mit allen darin enthaltenen Bearbeitungsschritten ca. 10 Sekunden. Das ist mehr als doppelt so schnell wie das Perl-Skript, das ich dazu geschrieben habe. Mit der Konkatenation, braucht das Programm zwei bis drei Minuten.
Gruß,
Matthias
Eine weitere C++-Frage: Wie konkateniert man std::string-Strings in angemessener Zeit?
Mein Problem:
Ich will eine Textdatei aus über 150.000 Zeilen durchlaufen. Die Datei besteht aus HTML-Texten, welche durch eindeutige Separatoren voneinander getrennt sind. Bei der Abarbeitung werden die einzelnen Zeilen einer Homepage in einen String-Vector gesteckt und sollen anschließend zu einer einzigen Zeile in einen String zusammengesetzt werden. Erraten: Ich will sowas ähnliches wie eine join-Funktion schreiben.
Nachdem mir Google bis jetzt noch keine Antwort darauf liefern konnte, ob es eine join-Funktion in C++ gibt, wende ich mich nun an euch. Gibt es eine join-Funktion in C++? Wenn nicht, wie implementiere ich die, ohne dass mein Programm langsamer als jedes Perl-Skript wird? Hier mal meine rudimentäre join-Funktion:
Code:
string join(vector<string>& collection, string& delimiter)
{
string result = "";
int i;
for (i = 0; i < collection.size() - 1; ++i)
{
result += collection.at(i) + delimiter;
}
result += collection.at(collection.size() - 1);
return result;
}
Die String-Konkatenation im Inneren der for-Schleife bremst das Programm aber extremst aus. Kommentiere ich die Konkatenation aus, läuft das Programm mit allen darin enthaltenen Bearbeitungsschritten ca. 10 Sekunden. Das ist mehr als doppelt so schnell wie das Perl-Skript, das ich dazu geschrieben habe. Mit der Konkatenation, braucht das Programm zwei bis drei Minuten.
Gruß,
Matthias