获取字符串的子串,可以使用ifstringstream会非常方便。ifstringstream和cin的概念是相似的都是一个输入流。我在测试代码时,发现ifstringstream不会自动更新,也就是说即使你重新给ifstringstream传入新的字符串,他依然会保持上次的结果,需要使用clear()函数清除上次的记录,才能够进行新的操作。
测试过程如下:
1.源文件内容point.txt:
文件中每列之间有空格
2.代码
std::string path = "point.txt";
std::string cont;
std::istringstream str;
std::string s;
std::ifstream infile(path);
while (!infile.eof())
{
std::getline(infile, cont);
str.str(cont);
while (str>>s)
{
std::cout << s << " " ;
}
std::cout << std::endl;
}
3.测试结果
从测试结果中可以看出,istringstream只写入了第一行数据,即使存在str.str(cont);也无法改变str流的位置。
4.将代码更改如下:
std::string path = "point.txt";
std::string cont;
std::istringstream str;
std::string s;
std::ifstream infile(path);
while (!infile.eof())
{
std::getline(infile, cont);
str.str(cont);
while (str>>s)
{
std::cout << s << " " ;
}
std::cout << std::endl;
str.clear();
}
5.测试结果如下:
加上clear()就能够得到正确的结果。
6.结论
istringstream在使用过程时,即使再次加入新的字符串,也无法改变istringstream流的状态,需要用clear()函数清楚当前流中的数据。
本人才疏学浅,不足或是错误之处,请各位批评指正。