2013-03-22 26 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