Probleme mit einer schleife
-
zu 1:
der inhalt des files sieht etwa so aus:
der 1
himmel 2
ist 3
blau 4ich vergleiche nur den linken teil (z.B. der) weil das dahinter in diesem Fall nicht interessiert und auch so nicht in der anderen liste vorkommt.
zu 2:
eigentlich möchte ich teil mit jedem wort aus stopp vergleichen, und dann ein neues str einlesen um daraus wieder ein teil zu bekommen usw. Wenn ich das mit dem letzten nur vergleiche muss ich über dfen code noch mal fliegen, da das letzte mal nur das erste wort aus stopp ausgelesen wurde und das mit dem inhalt von old vergleichen hat ( einzeln)
zu 3:
nein das ist mir nicht klar, würde aber erklären warum immer nur der erste teil verglichen wird. wie umgehe ich das??
gibt es da eine möglichkeit immer das nächste element zu nehmen??und sorry für das 3x posten das ist mir wirklich nicht aufgefallen.
-
koboldchen schrieb:
zu 1:
ich vergleiche nur den linken teil (z.B. der) weil das dahinter in diesem Fall nicht interessiert und auch so nicht in der anderen liste vorkommt.Das war mir in etwa klar. Die Frage ist, warum du den String jedesmal, wenn du eine Zeile aus stopp einliest, erneut nach dem Leerzeichen durchsuchst und aufteilst.
eigentlich möchte ich teil mit jedem wort aus stopp vergleichen, und dann ein neues str einlesen um daraus wieder ein teil zu bekommen usw.
Auch das war mir klar. Das leistet dein Code aber nicht. Du liest in der inneren Schleife eine Zeile aus stopp und machst immer dieselbe Stringoperationen. Wenn die Schleife beendet ist, machst du genau einen Vergleich. Passt nicht, oder?
Wenn ich das mit dem letzten nur vergleiche muss ich über dfen code noch mal fliegen, da das letzte mal nur das erste wort aus stopp ausgelesen wurde und das mit dem inhalt von old vergleichen hat ( einzeln)
Ich empfehle dir, zuerst einen Algorithmus auf Papier zu formulieren. Mit Drauflosprogrammieren wirst du nicht weit kommen. Nicht "überfliegen" und rumbasteln, sondern vorher denken.
nein das ist mir nicht klar, würde aber erklären warum immer nur der erste teil verglichen wird. wie umgehe ich das??
gibt es da eine möglichkeit immer das nächste element zu nehmen??Du solltest zunächst mal den Inhalt von stopp komplett in den Speicher lesen, falls die Datei nicht zu groß ist. Sonst durchforstest du für jede Zeile in old die stopp-Datei. Und die ändert sich ja wohl nicht, oder? Mit einer stopp-Liste im Speicher ist das Zurücksetzen jedenfalls einfacher, du kannst sogar vorgefertigte Suchfunktionen benutzen.
Aber formulier erst mal den Suchalgorithmus.
-
ich habe mir ansich schon einen vorgefertig gehabt auf papier:
Ziel: Nur Zeilen ohne Stoppwort in Kopier von old setzen.
Drei Files orginal, stoppwortliste, neues
1. Ich öffne alle drei, bzw. erstelle sie
2. Lese aus dem Stoppwort den ersten String heraus, vergleiche diesen mit dem string den ich aus dem orginalen herausgelesen habe, aber von diesem nur der linke teil.
3. vergleiche stoppwort und teil (linkerteil), wenn ungleich schreibe in neues File str, ansonsten nächsten string aus org nehmen.
4. Wenn file fertig überprüft ist mit dem ersten Stoppwort nehme das nächst. Wiederhole 3 + 4 bis ende ist von stoppwort.So ich denke das es in meinem Code schon am zweiten Teil von drei habert.
Jetzt zwei Fragen, wo bekomme ich den diese vorgefertigten suchfunktionen und geht das mit den while schleifen, ach und noch eine mein algorithmus ist ja wohl nicht zu verkehrt, oder??
Wenn es einfacher geht mir bitte bescheid geben, ich nehme für gewöhnlich den umweg über Rio um von hier nach Rom zu kommen.....
-
ach und noch eine mein algorithmus ist ja wohl nicht zu verkehrt, oder??
Doch, ist er. Spiel das doch mal in Gedanken durch.
Beispiel:
original: Hund 1 Katze 2 Maus 3 Kuh 4
stopp: Katze KuhNach deinem Algorithmus käme dabei heraus:
neues:
Hund 1
Maus 3
Kuh 4
Hund 1
Katze 2
Maus 3Du vergleichst zuerst jede Zeile im Original mit dem ersten Stoppwort. Damit landet jede Zeile außer der Katze in der neuen Datei. Danach vergleichst du jede Zeile mit dem zweiten Stoppwort. Damit hast du alle Zeilen außer der Kuh. Nicht ganz das, was du willst, oder?
Dein Code macht übrigens noch etwas anderes. Die innere und äußere Schleife ist gegenüber deinem Algorithmus vertauscht. Aber da der sowieso falsch ist, solltest du den Code erst mal komplett vergessen.
Bring deinen Algorithmus ins Reine, dann kümmern wir uns ums Einlesen und Suchen.
-
ok, ich probiere es und mlde mich später nochmal
-
neuer Versuch in sachen Algorithmus:
org stopp
Baum 10 Hund
Katze 17 Baum
Blume 25 Ernie
Affe 25Files werden geöffnet wie bisher.
Erste Zeile aus org lesen, linken Teil Zeilenweise mit Stoppwortliste vergleichen
wenn != dann schreiben in neu von str
wenn == dann nächste Zeile aus org lesenHoffe das er dieser besser ist
-
Das sieht gut aus.
-
Bring deinen Algorithmus ins Reine, dann kümmern wir uns ums Einlesen und Suchen.
Wie stelle ich das jetzt weiter an???
while???
wo schreibe ich das hin mit den '!=' oder '=='???
-
Lies doch zuerst mal die gesamte Stoppwortdatei in einen std::vector<CString>.
-
halt mich jetzt für noch blöder und ich habe eben in der MSDN gesucht und nix gefunden. Aber wie geht das oder was ist das??
-
Ein vector ist wie ein Array, nur besser.
Im (Standard) C++-Forum findest du jede Menge Informationen über die Klasse vector. In der MSDN Library gibt's auch was:
http://msdn.microsoft.com/library/en-us/vcstdlib/html/vclrfVectorClass.aspWie du zeilenweise einliest, weißt du ja. Mit push_back hängst du ein neues Element an den vector an.