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

时间:2015-02-25 06:21:44

标签: c++ stdstring

在下面的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;

2 个答案:

答案 0 :(得分:2)

您正在使用所有流,并且在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;
}

答案 1 :(得分:1)

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

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