赞
踩
string流可以向string类对象写入数据,也可以向string类对象读取数据。string流对象定义在sstream头文件中,其中的istringstream从string对象读取数据,ostringstream向string对象写入数据,stringstream既可以向string对象写入数据,也可以从string对象读数据。
1)istringstream流
当从设备(如键盘或硬盘文件)读取一行文本时,往往需要对整行文本中的单个单词进行处理,这时可以使用istringstream流对象。比如,需要获取一行文本中的所有单词,并把它存放到一个vector里,为后续的单词处理工作做准备。
- vector <string> wds; //保存读取的单词
- string line, word;
- /*利用getline获取一行文本,如果获取成功(getline函数返回有效的cin),则将整行文本的副本保存到
- istringstream对象iss中。然后通过调用输入运算符号>>逐个获取iss中的每一个单词,并把获得的单词
- 放到vector类型对象wds中。
- 需要注意的是,在读完line中的所有单词后,会触发文件结束信息,使iss变为无效状态,内层while循环
- 会结束。*/
- while(getline(cin, line)) {
- istringstream iss(line); //创建输入string流对象,保存line的一个副本
- while(iss >> word) //读取每个单词
- wds.push_back(word); //将读取的单词尾插到wds中
- }
2)ostringstream流
当需要一次打印不同数据类型的数据时,使用ostreamstream流可以很容易实现。比如,在上面的例子中,在获取所有的单词后,一次性输出每个单词和它们的长度:
- ostringstring out; //创建string流对象
- for (auto &i : wds) //处理每一个单词
- out << i << ":" << i.length() << '\n'; //将数据写入输出流对象中
- /*对象out的成员函数str返回存储的string类型数据。注意,ostringstream的另一个版本的成员函数
- str接受一个string类型的参数,用来覆盖原有的数据,例如out.str('')调用后,out里面的数据将被
- 清空*/
- cout << out.str(); //打印输出
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。