Zwei TStringLists vergleichen (eine zeile soll gefunden werden)
-
zeig mal deine versuche dann könnete man dir besser helfen
-
Hallo
sollte ungefährt so aussehen :
TStringList* list1 = new TStringList(); list1->Text = "Das\r\nist\r\nder\r\nerste\r\nTeil"; TStringList* list2 = new TStringList(); list2->Text = "Das\r\nist\r\nder\r\nzweite\r\nTeil"; int lastl2; for (int l1 = 0; l1 < list1->Count; ++l1) { lastl2 = -1; for (int l2 = 0; l2 < list2->Count; ++l2) { if (list1->Strings[l1] == list2->Strings[l2]) { Application->MessageBox(AnsiString("String <" + list1->Strings[l1] + "> l1 : " + IntToStr(l1) + " l2 : " + IntToStr(l2)).c_str(), "Gleicher String", MB_OK); lastl2 = l2; } } if (lastl2 == -1) Application->MessageBox(AnsiString("String <" + list1->Strings[l1] + "> l1 : " + IntToStr(l1)).c_str() , "String nicht vorhanden", MB_OK); } delete list1; delete list2;bis bald
akari
-
Wie wär's mit IndexOf?
-
@akari: also ich hab aus dem was du mir geschickt hast selbst einen code gemacht weil das nicht genau dem entsprach was ich brauche. Hab aber anscheinend einen kleinen Fehler gemacht:
TStringList *list1 = new TStringList(); list1->LoadFromFile("Lösungen.txt"); TStringList *list2 = new TStringList(); list2->LoadFromFile("Wörterbuch.txt"); int lastl2; for (int l1 = 0; l1 < list1->Count; ++l1) { lastl2 = -1; for (int l2 = 0; l2 < list2->Count; ++l2) { if(list1->Strings[l1] == list2->Strings[l2]) { Label2->Caption = list2->Strings[l2]; lastl2 = l2; } } } if (lastl2 == -1) { Label2->Caption="Nichts gefunden"; } delete list1; delete list2;Label2 zeigt nachdem vorgang immer "Nichts gefunden an" obwohl in beiden TStringLists die gleiche Zeile einmal vorkommt.
Sieht jemand den Fehler? ^^
-
Hallo
@ Blubby : deine Überprüfung ist im Grunde überflüssig, da du lastl2 erst nach der äußeren Schleife überprüfst. Du must das aber wiee ich in jedem Durchgang auswerten.
@ Jansen : ja hast recht... die innere Schleife kann durch IndexOf ersetzt werden.
bis bald
akari
-
akari schrieb:
Hallo
@ Blubby : deine Überprüfung ist im Grunde überflüssig, da du lastl2 erst nach der äußeren Schleife überprüfst. Du must das aber wiee ich in jedem Durchgang auswerten.
@ Jansen : ja hast recht... die innere Schleife kann durch IndexOf ersetzt werden.
bis bald
akariheißt das ich brauche lastl2 gar nicht? Oder muss es drin sein
-
Hallo
du brauchst rür jede einzelne Zeile aus list1 eine einzelne Überprüfung von lastl2. Wie Jansen bereits gesagt hat kannst du das jetzt auch einfacher haben :
... int l2; for (int l1 = 0; l1 < list1->Count; ++l1) { if ((l2 = list2->IndexOf(list1->Strings[l1])) > -1) { // zeile mit index l2 gefunden } else { // zeile nicht gefunden } } ...bis bald
akari
-
vielen dank an euch!
-
Hab noch eine Frage was kein neues Topic wert ist

Kann ich irgendwie das Wörterbuch aus MS Word extrahieren? Denn ich brauche eine Liste mit deutschen wörtern (nicht alle aber die allgemeinen)
-
Das hat a) absolut nichts mit dem Thema des Threads zu tun, gehört also in jedem Fall in einen eigenen Thread, und hat b) auch nichts mit dem C++Builder zu tun, für solche Fragen gibt es hier z.B. "Rund um die Programmierung" oder besser noch "Rund um den PC".
-
Jansen schrieb:
Das hat a) absolut nichts mit dem Thema des Threads zu tun, gehört also in jedem Fall in einen eigenen Thread, und hat b) auch nichts mit dem C++Builder zu tun, für solche Fragen gibt es hier z.B. "Rund um die Programmierung" oder besser noch "Rund um den PC".
tut mir leid mach ich sofort