如何将读取位置设置为 std::istringstream 中的第一个字符串?

how to set read position to 1st string in std::istringstream?

在下面的 C++ 代码中,在使用 getline() 对其进行一些读取操作后,我无法将读取指针倒回第一个字符串:

 std::string token;
 std::string first;
 std:string str = "1,2,3,4,5";
 std::istringstream range(str);
 while(getline(range,token,','))
     cout<<"token="<<token<<endl;
 getling(range,first,',');
 cout<<first;

您正在使用所有流,并且在 while 结束时流设置其 eof 位。您需要 clear 流然后返回到第一个位置:

#include <iostream>
#include <string>
#include <sstream>

int main()
{
    std::string token;
    std::string first;
    std::string str = "1,2,3,4,5";
    std::istringstream range(str);
    while (std::getline(range, token, ','))
        std::cout << "token=" << token << std::endl;

    // need these 2 lines
    range.clear(); // clear the `failbit` and `eofbit`
    range.seekg(0); // rewind

    std::getline(range, first, ',');
    std::cout << first;
}

您必须清除字符串并将流位置设置为开头:

range.clear();
range.seekg(0,ios_base::beg);