使用 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&lt;std::streamsize&gt;::max() @naxchange 是的,这完全取决于 Tophe 认为什么是有效输入。如果你这样做了,它将接受1woot,2,3 , 4,5

以上是关于使用 stringstream 将动态大小的字符串转换为整数的主要内容,如果未能解决你的问题,请参考以下文章

使用 ostringstream 或 stringstream 将 C++ Int 转换为字符串

使用 stringstream 将字符串转换为 int

使用 stringstream 浮动的字符串

如何使用 stringstream 在 C++ 中将字符串转换为双精度值 [关闭]

从 stringstream 到 string 的转换会删除 '=' 字符

为啥 const char* 不能与 boost 的 stringstream 和 read_json 一起使用?