convert string to bool

Thomasio

Erfahrenes Mitglied
Ich habe einen Satz Daten, die ich in eine Datei schreibe, und von dort wieder lese.
Mit dabei sind ein paar boolsche.
Beim Schreiben nicht das Problem:

stringstream << bool

schreibt anstandslos 0er und 1er.

Beim Lesen bin ich mir dann nicht sicher, ich weiss ja, dass er nur 0er oder 1er liest, aber er liest sie halt als string, und ich muss demnach string to bool konvertieren.
Meine Lösung schaut im Moment so aus:

Code:
std::string DateiInhalt = "0:1:0:1";
std::vector<bool>variablen;
std::stringstream s(DateiInhalt);
std::string temp;
while(std::getline(s,temp,':'))
{
variablen.push_back((bool)atoi(temp.c_str()));
}

Das erscheint mir ein bischen heftig viel konvertieren auf einmal.
Ist das überhaupt erlaubt? Wenn nein, wie dann.
Geht das evtl. auch eleganter?
 
C++:
std::vector<bool> vars;
std::ostringstream ss(DateiInhalt.c_str());

bool value;
// read value
while (ss >> value) 
{ 
    // insert into array
    vars.push_back(value); 
    // skip seperator char
    ss.ignore(); 
}
... so sollte es gehen ... geht aber eleganter ...
 
Danke für die Idee, auf jeden Fall besser als meine Lösung.

Funktioniert halt, genau wie meine, nur wenn ausschliesslich bool´s gelesen werden.
Mein Ansatz macht die Konvertierung als 1-Zeiler, weil ich dann via Counter oder so auch verschiedene Typen einlesen kann, aber die "elegante" Lösung dazu fehlt mir noch.

Klar, es gibt immer die ganz einfache Lösung:

if ( temp == "0" ) { vars.push_back(0) } else { vars.push_back(1) }

aber so toll finde ich die auch nicht.
 
Weiß nicht ob evtl.
C++:
char value;
// read value
while (ss.get(value)) 
{ 
    // insert into array
    vars.push_back(value == '1'); 
    // skip seperator char
    ss.ignore(); 
}
z.B. nciht schneller ist ... nja den Seperator find ich halt doof .. is der vom Format oder von DIR vorgegeben?
 
Der Separator ist von mir, muss da aber hin, weil wie gesagt die Datei nur unter anderem boolsche enthält.
Ich bin nur gleich zu Anfang über string to bool gestolpert, da hängen geblieben und noch gar nicht dazu gekommen den Rest mit rein zu machen.
 
Zurück