今天遇到的一个问题是:我希望从一个文件中读出每一行,再处理每行由空格隔开的各个部分。
具体来说,就是有这样的一些记录:
北京 邮政 招聘
邮局 可以 邮寄 光盘 吗
...................
要对"北京"、"邮政"、"招聘"等单独处理。
要读入一行,当然c++的解决办法是
std::ifstream record;
……//判断打开
record.getline(buffer, sizeof(buffer));
关键是接下来怎么作。最初的想法是把buffer直接转成string类型的,然后用string的切割函数分割之,再…….。但是觉得麻烦,最终终于找到解决方案——利用标准库中的istringstream这个类。Istringstream类的头文件是<sstream>。使用方法很简单,如下
std::istringstream input(buffer);//接上面
std::string s;
while( !input.eof()){//这里的结束和文件流表面上来没什么区别
input>>s;
}
这样基本解决,但是又遇到了另一个问题:我不知道每行被分成几份,因此在使用循环的时候不知道终止条件。解决了!所有流都有着一样的结束判断条件eof()。