Probleme mit substr bei strings aus einem Vector von Structs
-
Hi!
Habe folgendes Problem. Ich habe einen Vector "vZeilen", der structs "SZeile" enthält. Jedes struct beseteht aus 4 strings. Jetzt möchte ich diese Strings einzeln modifizieren, da bestimmte Strings Daten in folgendem Format enthalten: "1092,23 GB".
Jetzt möchte ich folgenden Code verwenden, um die Zahl und die Einheit zu trennen:
void ausgabe() { vector<SZeile>::const_iterator cit; size_t length; for(cit=vZeilen.begin();cit!=vZeilen.end();cit++) { length=cit->strDown.length(); cout << "Wert: "; cout << cit->strDown.substr(0,length-3); cout << " Einheit: "; // hier scheint der Fehler zu "entstehen", da der substr // nicht ab 0 begonnen wird cout << cit->strDown.substr(length-2,2) << endl; } }
Aber nachdem das Programm kompiliert wurde (ohne Fehler) bekomme ich folgende Debug Nachricht beim Ausführen des Programms:
"This application has requested the Runtime to terminate it in an unusual way. Please contact...[bla bla]"
Beim rumexperimentieren ist mir aufgefallen, dass diese Meldung nur dann kommt, wenn ich mit substr an einer Position anfange, die nicht gleich 0 ist. Wenn ich einen anderen String verwende, also nicht den aus dem Vector ausgelesenen, gibt es auch keine Probleme...
Weiss jemand wo mein Problem liegt?Gruß
wurzel
-
Ich habe eine Lösung gefunden. Wenn ich statt
for(cit=vZeilen.begin();cit!=vZeilen.end();cit++)
folgendes schreibe:
for(cit=vZeilen.begin();cit!=vZeilen.end()-1;cit++)
gehts. Ich habe die erste Version aus einem anderen Programm von mir genommen, dort hatte ich keinerlei Probleme damit. Verstehe noch nicht ganz warum !=end() hier zu diesem Problem geführt hat.
Wenn mir das jemand genauer erläutern könnte wär ich sehr dankbar :D.Gruß
wurzel
-
Mit deiner zweiten Version lässt du das letzte Element aus, wenn dir trotzdem keine Daten fehlen schreibst du an irgendeiner Stelle wohl Müll in das letzte Element.
-
Jau! Habe an meiner Einlesefunktion keine Kontrolle dringehabt, ob der letzte Vector leer bzw. in derselben Form wie die vorherigen Vectoren ist. Ist mir aufgefallen als ich nochmal an der Einlesefunktion gearbeitet habe, um die kommas in punkte umzuwandeln, dabei habe ich gesehen dass ich den letzten Vektor genau wie Du sagst mit Müll gefüllt habe :D.
Vielen Dank für den Hinweis!