2016-09-09 41 views
3

我正在開發一個Hacker Rank賦值工具,並需要將字符串轉換爲int並決定使用stringstream(我第一次使用它)。有沒有辦法以某種方式使用相同的聲明stringstram(是你如何調用它?),而不是爲每個轉換創建新的?我嘗試使用.clear()函數,但它仍然無法工作。清除並重復使用一個字符串流進行多次轉換

我怎麼做的:

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;` 

,我想如何做到這一點:

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

有沒有辦法做到這一點相似?看起來很雜亂,不斷宣佈新的。

+1

更好:'std :: stoi'。 –

回答

2

您可以調用str(s)方法將std::istringstream初始化爲新字符串。如果您所做的只是從字符串轉換而來,則應該使用std::istringstream

如果之前的轉換導致錯誤,您還需要clear()來清除其錯誤狀態。

所以,你的例子是:

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

好吧,感謝您的幫助,感謝:) –

2

使用

ss.str(""); 

清除流。 ss.clear()僅重置標誌。

+0

這似乎是解決方案,謝謝:) –

+0

@Arūnas:Ups,是的,雙後:-) – Klaus

相關問題