string 流
2015-06-09 15:00
162 查看
sstream头文件定义了三个类型来支持内存IO:
istringstream 从string读数据
ostringstream 向string写数据
stringstream 读写皆可
istringstream
对整行文本进行处理,再处理行内的单个单词可以用istringstream.
对于这样一个文件,它的每一行是一个人名和他的若干个电话:
soybean 123 254 789
soybean2 589 789 264 697
soybean3 189
上面的代码中用getline从标准输入读取整条记录,在while中定义了一个PersonInfo的对象用来保存当前的记录。然后将istringstream与刚读入的line进行绑定,这样就可以用输入运算符读取当前记录的每个元素。先读入名然后再用一个while循环读取电话号码。
ostringstream
逐步构造输出,最后一起打印时,ostringstream是很有用的。对于上面的电话号码簿的程序,如果想将其电话号码逐个验证并且格式化。由于不想输出无效的号码的人,所以对每个人知道验证完所有号码后再输出,此时可以先将输出内容写到一个内存ostringstream中:
istringstream 从string读数据
ostringstream 向string写数据
stringstream 读写皆可
sstream strm;//定义一个sstream头文件中类型的对象,未绑定 sstream strm(s);//绑定 strm.str();//返回strm所保存的string的拷贝 strm.str(s);//将string s拷贝到strm中,返回void
istringstream
对整行文本进行处理,再处理行内的单个单词可以用istringstream.
struct PersonInfo { string name; vector<string> phones; }; string line, word;//分别保存来自输入的一行和单词 vector<PersonInfo> people;//保存输入的所有记录 while (getline(in, line)) { PersonInfo info; record.clear();//重复使用字符串流时,每次都要调用clear record.str(line);//将记录绑定到刚读入的行 record >> info.name;//读取名字 while (record >> word)//读取电话 info.phones.push_back(word); people.push_back(info); }
对于这样一个文件,它的每一行是一个人名和他的若干个电话:
soybean 123 254 789
soybean2 589 789 264 697
soybean3 189
上面的代码中用getline从标准输入读取整条记录,在while中定义了一个PersonInfo的对象用来保存当前的记录。然后将istringstream与刚读入的line进行绑定,这样就可以用输入运算符读取当前记录的每个元素。先读入名然后再用一个while循环读取电话号码。
ostringstream
逐步构造输出,最后一起打印时,ostringstream是很有用的。对于上面的电话号码簿的程序,如果想将其电话号码逐个验证并且格式化。由于不想输出无效的号码的人,所以对每个人知道验证完所有号码后再输出,此时可以先将输出内容写到一个内存ostringstream中:
for (const auto &entry : people)//对people中每一项 { ostringstream formatted, badNum;//每个循环步创建的对象 for (const auto &nums:entry.phones)//对每个数 if (!valid(nums)) { badNum << " " << nums;//将数的字符串形式输入到badNums } else {//将格式化的字符串写入formatted formatted << " " << format(nums); } if (badNum.str().empty())//没有错误的数字 os << entry.name << " " << formatted.str() << endl;//打印名字和格式化了的数 else cerr << "input error" << entry.name << "invalid number(s)" << badNum.str() << endl; //否则打印错误的名字和数 } cout << os.str() << endl;
相关文章推荐
- .net 防止页面刷新重复提交
- Java 传值和传引用
- oracle 创建外部表实例及常用语句解释
- 27年,一事无成,也许他们可以存入您的点自慰
- 安装mongodb记录,mongo基本命令记录
- Xcode6中添加pch
- SQL编写
- springmvc之helloworld
- Oracle函数-计算时间跨度
- 软件测试的分类
- 今天收到CSDN发的奖品,很开森
- 【hbase】HBase条件查询实现过程解析(多条件查询)
- Google 如何逐步牢牢控制 Android 开源系统
- Android或Linux调试addr2line工具锁定命令的使用
- Bluetooth---初步了解Android 蓝牙4.0
- 今天收到CSDN发的奖品,很开森
- css font-weight原理
- 无法更新 EntitySet“GuigeInfo”,因为它有一个 DefiningQuery,而 <ModificationFunctionMapping> 元素中没有支持当前操作的 <InsertFunction> 元素。
- img src 改变问题
- Xcode及模拟器SDK下载