【问题标题】:Convert string of dynamic size to ints with stringstream使用 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);
}

【问题讨论】:

    标签: c++ gcc std


    【解决方案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
    猜你喜欢
    • 1970-01-01
    • 2012-04-06
    • 1970-01-01
    • 2022-12-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多