2016-09-09 4 views
3

Ich arbeitete an einer Hacker Rank-Zuweisung und benötigte einen Weg, um eine Zeichenkette in int umzuwandeln und entschied mich dafür, Stringstream zu verwenden (das erste Mal, dass ich es benutzte). Gibt es eine Möglichkeit, das gleiche deklarierte stringstram zu verwenden (so wie du es nennst), anstatt für jede Konvertierung neue zu erstellen? Ich habe versucht, die .clear() -Funktion zu verwenden, und es hat immer noch nicht funktioniert.Einen Stringstream für mehrere Conversions löschen und wiederverwenden

Wie ich es tat:

stringstream s0(hour); // this is my way of converting string to int because stoi doesn't seem to work 
s0 >> i_hour; 
cout << i_hour << endl; 
stringstream s1(minute); 
s1 >> i_minute; 
stringstream s2(second); 
s2 >> i_second;` 

und wie wollte ich es tun:

stringstream ss(hour); 
ss >> i_hour; 
ss.clear(); 
ss << minute; 
ss >> i_minute; 

ist es eine Möglichkeit, es in ähnlicher Weise zu tun? Sieht wirklich chaotisch aus, neue zu deklarieren.

+1

Noch besser: 'std :: stoi'. –

Antwort

2

Sie können die Methode str(s) aufrufen, um eine std::istringstream auf eine neue Zeichenfolge zu initialisieren. Sie sollten std::istringstream verwenden, wenn Sie nur eine Zeichenfolge konvertieren.

Wenn die vorherige Konvertierung zu einem Fehler geführt hat, benötigen Sie auch clear(), um den Fehlerzustand zu löschen.

So Ihr Beispiel wäre:

istringstream ss(hour); 
ss >> i_hour; 
ss.clear(); 
ss.str(minute); 
ss >> i_minute; 
+0

Okay, danke für die Hilfe, schätze es :) –

2

Verwenden

ss.str(""); 

den Stream zu löschen. ss.clear() setzt nur die Flags zurück.

+0

Das scheint die Lösung zu sein, danke :) –

+0

@ Arūnas: Ups, ja, double post :-) – Klaus

Verwandte Themen