QString Elemente bearbeiten

Alles rund um die Programmierung mit Qt
Antworten
Wotan
Beiträge: 10
Registriert: 2. Mai 2008 17:45

QString Elemente bearbeiten

Beitrag 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
ConfusedSushi
Beiträge: 57
Registriert: 18. Januar 2008 16:46
Wohnort: Berlin

Beitrag 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
ObeliX
Beiträge: 59
Registriert: 14. November 2007 17:47

Beitrag 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
Wotan
Beiträge: 10
Registriert: 2. Mai 2008 17:45

Alles klar

Beitrag von Wotan »

Cool hat funktioniert :D Danke!
Antworten