我发现很难绕过stringstream的工作。为什么下面的代码中的第二个while循环不起作用?如果流对象在第一个while循环结束时被清空,是否有任何变通办法将其恢复到初始状态?

// input is string of numbers separated by spaces (eg. "22 1 2 4")
    std::string input;
    std::getline(std::cin, input);

    stringstream stream (input);

    // print individual numbers
    while (stream >> n)
    {
        cout << n << endl;
    }

    // print individual numbers again
    while (stream >> n)
    {
        cout << n << endl;
    }

最佳答案

stringstreamistream的子类,因此stream >> n(std::istream::operator>>)返回reference to istreamstream可以转换为bool(std::ios::operator bool):当它不再有任何数据(到达文件末尾)时,它将转换为false
您已经在第一个循环中完成了stream的读取-不再包含任何数据。



您需要自己存储值,然后再使用它们-不允许复制流(这对它们实际上没有意义)-Why copying stringstream is not allowed?

关于c++ - 多次使用stringstream对象,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53336255/

10-13 08:13