Vector.size()

Thomasio

Erfahrenes Mitglied
Ich habe ein Problem mit der Länge eines Vectors, weil die Länge sich scheinbar ändert, wenn der letzte Eintrag leer ist.

Code:
std::string x = "a.b.c.d";
std::stringstream s(x);
std::vector<std::string>MyListe;
std::string temp;

while(std::getline(s, temp, '.'))
     {
         MyListe.push_back(temp);
     }

So stimmt es, wie es sein sollte, MyListe.size() enthält die Einträge 0 bis 3 und ist demnach gleich 4.

Mache ich aber

std::string x = "a.b.c.";

dann ist MyListe.size() gleich 3.
Das wäre mir noch logisch, weil hinter dem letzten Punkt nichts mehr steht, der letzte Eintrag also NULL ist.
Dumm wird es, wenn ich mache

std::string x = "a.b.c..";

denn hier ist size wieder gleich 4, obwohl beide letzte Einträge leer sind.
Ich kann es sogar ganz leer lassen

std::string x = "....";

size ist immer noch 4

Frage also, wie bringe ich den vector dazu leere Einträge auch dann noch als existierenden Eintrag zu nehmen, wenn es der letzte Eintrag im array ist?
Einzige Möglichkeit die ich bisher gefunden habe ist einfach auf Verdacht immer einen Punkt hinten anhängen, so dass immer ein leerer Eintrag am Ende steht, aber damit gerate ich ständig ins Chaos, bei Vergleichsoperationen.
Geht das irgendwie eleganter?
 
Hallo,

das liegt am Verhalten von getline(), das nichts mehr einliest, wenn nach dem Trennzeichen der String zuende ist. Entweder du baust den String entprechend um (was du ja schon überlegt hast) oder du musst eine eigene Routine für's Parsen bauen.

Gruß
MCoder
 
Zurück