使用 stringstream 将动态大小的字符串转换为整数
Posted
技术标签:
【中文标题】使用 stringstream 将动态大小的字符串转换为整数【英文标题】:Convert string of dynamic size to ints with stringstream 【发布时间】:2013-03-22 23:50:09 【问题描述】:我正在尝试通过使用 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);
【问题讨论】:
【参考方案1】:您需要确保ignore
逗号:
while(ss >> tmpInt)
myList.addValue(tmpInt);
ss.ignore();
目前,提取将尝试读取一个整数,发现有逗号,并将流保持在失败状态。
或者,如果您想检查字符是否实际上是逗号(为了输入验证),您可以这样做:
while(ss >> tmpInt)
myList.addValue(tmpInt);
if (ss.get() != ',') break;
【讨论】:
您可以告诉ignore()
方法专门忽略逗号,使用ss.ignore(n, ',')
,其中n
是要跳过的足够多的字符,直到到达','
天哪,你真快!我还尝试对数据字符串执行此操作:replace(choice.begin(),choice.end(),',','');这似乎也有效。在这里做的最洁净的事情是什么?
@Tophe 我不会更换。您应该准确找出您认为有效的输入并准确验证。使用您的替换方法,他们也可以输入1 , 2 3 4,5
。你想要吗?
作为@naxchange评论中的“足够大的数字”,通常使用std::numeric_limits<std::streamsize>::max()
。
@naxchange 是的,这完全取决于 Tophe 认为什么是有效输入。如果你这样做了,它将接受1woot,2,3 , 4,5
。以上是关于使用 stringstream 将动态大小的字符串转换为整数的主要内容,如果未能解决你的问题,请参考以下文章
使用 ostringstream 或 stringstream 将 C++ Int 转换为字符串
如何使用 stringstream 在 C++ 中将字符串转换为双精度值 [关闭]