2013-03-22 36 views
0

我試圖通過使用stringstream轉換用戶給定的字符串來將int值添加到向量中。用戶給出這樣的數據:1,5,6,7,4,所以我永遠不會知道有多少int會有。將動態大小的字符串轉換爲帶有字符串流的整數

現在我只能得到第一個輸入的數字。其餘的被忽略。 這是我有點想:

stringstream ss; 
int tmpInt; 
string data; 

cout << "Enter data: (1,2,3,4 etc.)"; 
getline(cin, data); 

ss.str(data); 

while(ss >> tmpInt) 
{ 
    myList.addValue(tmpInt); 
} 

回答

3

你需要確保你ignore逗號:

while(ss >> tmpInt) 
{ 
    myList.addValue(tmpInt); 
    ss.ignore(); 
} 

目前,提取將嘗試讀取一個整數,發現有一個逗號,並將流保持在失敗狀態。

另外,如果你想檢查字符是否實際上是一個逗號(用於輸入驗證的緣故),你可以這樣做:

while(ss >> tmpInt) 
{ 
    myList.addValue(tmpInt); 
    if (ss.get() != ',') break; 
} 
+2

你可以告訴'忽略()'方法來具體忽視逗號,使用ss.ignore(n,',')',其中'n'是一個足夠大的字符數跳過,直到達到'','' – naxchange 2013-03-22 23:54:35

+0

我的上帝你很快!我也嘗試在數據字符串上做這個:replace(choice.begin(),choice.end(),',','');這似乎也起作用。這裏最乾淨的事情是什麼? – Christoffer 2013-03-22 23:56:59

+0

@Tophe我不會做替換。你應該弄清楚你認爲是有效的輸入和準確的驗證。使用替換方法,他們也可以輸入'1,2,3,4,5'。你想要那個嗎? – 2013-03-22 23:58:53