doppelte Einträge entfernen
-
Hallo,
mit dem Code möchte ich alle doppelten Einträge in einer Datei (zeilenweise)
entfernen.int main() { std::list<std::string> list; // Daten einlesen std::ifstream istr("mein_file.txt"); while(!istr.eof()) { std::string str; getline(istr, str); list.push_back(str); } istr.close(); // liste sortieren und doppelte Einträge entfernen list.sort(); std::unique(list.begin(),list.end()); // Liste in die Datei schreiben std::ofstream ostr("mein_file.txt"); for(std::list<std::string>::const_iterator it = list.begin(); it != list.end(); ++it) ostr << (*it) << "\n"; }
Als Testdatei gibt's nur vier Zeilen in "mein_file.txt"
eins
zwei
drei
vierDas Problem ist, dieses Programm lässt sich nur einmal ausführen. Bei jedem
weiteren Ausführen wird ein neue Eintrag von "zwei" eingefügt, also wieder
doppelte Einträge. Und zwar, die erste Zeile ist immer leer.Woran kann es liegen?
Danke
/edit: sfds
-
Weiß ich gerade auch nicht, aber du hast ein fehler drin:
std::unique verändert nur die Reihenvolge innerhalb des Containers. Es gibt die die neue Endposition zurück:
[cpp]
std::liststd::string::const_iterator end = std::unique(list.begin(),list.end());// Liste in die Datei schreiben
std::ofstream ostr("mein_file.txt");
for(std::liststd::string::const_iterator it = list.begin(); it != end; ++it)
ostr << (*it) << "\n";
}
[/cpp]
-
oder entfernen
std::list<std::string>::const_iterator end = std::unique(list.begin(),list.end()); list.erase(end, list.end());