ifstringstream的使用注意事项,ifstringstream的更新

本文介绍了在C++编程中,使用istringstream处理字符串流时遇到的问题。当尝试用ifsstream读取文件并更新字符串流时,发现ifsstream不会自动刷新。通过测试代码,作者发现需要调用clear()函数来清除旧的数据,才能正确读取新的内容。加入clear()后的代码能够正常工作,这表明在使用istringstream时,必须手动清理流状态以确保正确处理新的输入。
摘要由CSDN通过智能技术生成

获取字符串的子串,可以使用ifstringstream会非常方便。ifstringstream和cin的概念是相似的都是一个输入流。我在测试代码时,发现ifstringstream不会自动更新,也就是说即使你重新给ifstringstream传入新的字符串,他依然会保持上次的结果,需要使用clear()函数清除上次的记录,才能够进行新的操作。
测试过程如下:
1.源文件内容point.txt:
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()函数清楚当前流中的数据。

本人才疏学浅,不足或是错误之处,请各位批评指正。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值