一个stringstream的对象ss,当它的状态是eof(),就会一直在这个状态不能自拔,即使使用ss.str(new_string)也没用。所以在再次使用<<, >>之前要重置它的状态。


std::string line = "word1 word2 word3";
std::stringstream ss(line);
std::string word;

while(ss >> word){
	std::cout << word << std::endl;
}

line = "some other sentence";

// ss.str(line) 是将line的内容附加到ss原来的字符串后面,而不是替换它的内容。
ss.str("");	 // 先清空ss里可能剩余的字符
ss.str(line); 

// 恢复 ss 流的状态,上一步读结束后,它的状态很可能是EOF,
// 若不清空,接下来的读都不会成功
ss.clear();

while(ss >> word){
	std::cout << word << std::endl;
}

如何正确的使用 stringstream, iostream 等输入输出流,请参考C++ FAQ,它提供了不少示例代码。

http://isocpp.org/wiki/faq/input-output


本文地址:http://zisxks.com/2014/04/06/using-std-stringstream
分享到 Share: 0

欢迎转载,转载请注明作者及出处zisxks.com,请勿用于商业用途