Seite 1 von 1

QString Elemente bearbeiten

Verfasst: 2. Mai 2008 21:31
von Wotan
Hi

Folgendes Szenario:

Code: Alles auswählen

int from = 0;
QString Str = "Ein d[RÜCK]b[RÜCK]Text der  [RÜCK]mit vielen fal[RÜCK][RÜCK][RÜCK]Fehler[RÜCK]rn bestückd[RÜCK]t istflr[RÜCK][RÜCK][RÜCK]... mal schaun was passiert";

while((form=Str.indexOf("[RÜCK]", from))!=-1)
{
     Str.remove(from-1, 1);
}
Str.remove("[RÜCK]");
Ergibt bei mir folgende Ausgabe:
"Ein Text der mit vielen fa[RÜCK[RÜCKFehlern bestückt istfl[RÜCK[RÜCK... Drei Leer mal schaun was passiert"

Allerdings sollte überall da wo ein [RÜCK] steh auch jedes mal das Element davor gelöscht werden. Außerdem sind nicht alle [RÜCK] vollständig gelöscht. Wisst ihr was am Code falsch ist und wie ich des verbessern könnte?
Danke schon mal

Wotan

Verfasst: 2. Mai 2008 23:24
von ConfusedSushi
dein code löscht auch nur ein zeichen, du müsstest schon die länge von [rück] + 1 löschen und nicht nur ein zeichen

Verfasst: 3. Mai 2008 01:09
von ObeliX
is doch ganz klar. du läßt die bereits bearbeiteten [RÜCK]'s mit im string. bei den mehrfach-[RÜCK]'s klappt der erste ganz normal. auch das nächste wird korrekt gefunden und ... das zeichen davor entfernt ... und das ist das abschließende "]" des zuvor bearbeiteten (ersten) [RÜCK], daß ja noch im text steht und nicht das zeichen vor diesem.

mit ConfusedSushis änderung sammelst du das [RÜCK] jeweils mit weg, sodaß das nächste [RÜCK] wieder direkt hinter dem zeichen steht, für das es gedacht ist. das alleine würde aber noch nicht ganz helfen. zudem müßte nach jedem löschen 'from' eins zurück gesetzt werden, da sonst das direkt nachfolgende-[RÜCK] übersehen würde.
also so :

Code: Alles auswählen

  while((from=Str.indexOf("[RÜCK]",from))!=-1) {
    Str.remove(from-1,7);
    --from;
  }
oder so, weil ein dreifach- viel lustiger aussieht : :lol:

Code: Alles auswählen

  while((from=Str.indexOf("[RÜCK]",from))!=-1) Str.remove(from---1,7);
dafür kann das letzte Str.remove("[RÜCK]"); entfallen, weil ja schon alles entfern wurde.

gruß Obel

Alles klar

Verfasst: 3. Mai 2008 09:59
von Wotan
Cool hat funktioniert :D Danke!