mehrfach vorhandene Strings ignorieren
-
Hallo zusammen,
habe ein kleines Problem an das ich mich rangetastet habe, leider stecke ich jetzt fest. Ich habe folgende Daten:
WKZ[0]=T7070113
WKZ[1]=T7070120
WKZ[2]=T7070325
WKZ[3]=T7070325
WKZ[4]=T7070325
WKZ[5]=T1035214
...
Daten können sich auch ändern....Ich möchte gerne die doppelt vorkommenen Daten ignorieren und nur einmal ausgeben.
SOLL:
WKZ[0]=T7070113
WKZ[1]=T7070120
WKZ[2]=T7070325
WKZ[3]=T1035214Mit folgendem Code habe ich dies versucht:
std::ofstream outfile; outfile.open("M:\XXL.txt",ios::app); outfile << WKZ[0] << endl; outfile.close(); for(i=1;i<=50;i++) { w=0; for(r=0;r<i;r++) { if(WKZ[i]!=WKZV[r]) {w=1; } if(WKZ[i]==WKZV[r]) { w=0; break; } } if(w=0) { } if(w=1) { std::ofstream outfile; outfile.open("M:\XXL.txt",ios::app); outfile << WKZ[i] << endl; outfile.close(); } }
Die Strings WKZV[] sind identisch mit den WKZ[]. Habe ich nur zum Vergleich mit eingebaut.Leider schreibt er immer noch alle Daten doppelt und dreifach in das Textfile ?! Was mache ich falsch ?
Ergebnis Textdatei:
T7070113
T7070120
T7070325
T7070325
T7070325
T1035214
T7070121
T7070121
T7070121
T7070121
T7070122
T7070122
T7070122
T7070122
T7030062
T7030061
T7040072
T7050094
T7060101
T7060101
T7060102
T7040073
T7010009
T7050091
T7040073Vielen Dank im Voraus,
Benjamin
-
Ich verstehe nicht ganz was du da mit dem WKZV machst bzw. vorhast. Ich würde die Werte WKZ in eine Liste oder ein Array stecken. Dann würde ich durch diese Liste iterieren und die Elemente in eine zweite Liste kopieren, wenn diese dort noch nicht drin vorkommen. Damit dürften dann auch die mehrfach vorkommenden Listenelemente eliminiert sein.
-
Benutze doch einfach ein std::set<..>.
Simon
-
if(w=0) sowie if(w=1) sind Zuweisungen und keine Vergleichsoperatoren. Damit sind beide Bedingungen erfüllt. Das ist das was mir aufgefallen ist. Den restlichen Code hab ich mir nicht angesehen und auf Logik überprüft.
-
theta schrieb:
Benutze doch einfach ein std::set<..>.
SimonWeil es u.U. langsamer ist und ineffizient... Solche Lösungen sind oft ineffektiv weil die ganzen stl Container unmassen an Allokationen durchführen!
Aber ich vermute hier komt es weder auf Speed noch auf Speicher an bei 50 Elementen.Die schnellste Lösuwäre vermutich den Array in Place zu sortieren und dann einfach aneinander liegende Duplikate zu übergehen.
-
Hallo zusammen,
der Fehler kommt tatsächlich daher, dass if(w=0) eine Zuweisung war und kein
Vergleich. Mit zwei Gleicheitszeichen passt der Quellcode.Ich denke ich werde den Code demnächst mal ändern und vereinfachen. Für mein Anliegen reicht dieser Code aber erstmal.
Thanks@all