当前位置: 首页 > article >正文

【C++】IO库(三):string流

8.3 string 流

sstream 头文件定义了三个类型来支持内存 IO,这些类型可以向 string 写入数据,也可以从 string 读取数据,就像 string 是一个 IO 流一样。

istringstream 从 string 读数据;ostringstream 向 string 写入数据;而头文件 stringstream 既可以从 string 读数据,也可以向 string 写数据。

8.3.1 使用 istringstream

假定现在有如下的输入文件:

morgan 2015552368 8625550123
drew 9735550130
...

文件中的每条记录以人名开始,后面的数字表示电话号码,定义一个简单的结构体来描述输入数据:

struct PersonInfo {
	string name;
	vector<string> phones;
};

程序需要读取数据文件,并创建一个 PersonInfo 的 vector:

string line, word;
vector<PersonInfo> people;
while(getline(cin, line)) {
	PersonInfo info;				// 创建一个保存当前行数据的对象
	istringstream record(line);		// 将记录绑定到刚读入的行
	record >> info.name;			// 读取名字
	while(record >> word) {			// 读取电话号码
		info.phones.push_back(word); // 保存到 vector
	}
	people.push_back(info);
}

8.2.2 使用 ostringstream

当我们逐步构造输出,虚妄最后一起打印时,ostringstream 非常有用。对于刚才的例子:

for(const auto &entry : people) {	// 遍历 people 当中的每一项
	// 注意 people 是保存着 PersonInfo 的 vector 对象, 因此 entry 是 PersonInfo 对象
	ostringstream formatted, badNums;	// 每个循环创建对象自动析构
	for(const auto &nums : entry.phones) {	// 对每一个数
		if(!valid(nums)) {					// 如果不是 valid 的数
			badNums << " " << nums;			// 将数的字符串形式存入 badNums
		} else {
			// 将格式化的字符串写入 formatted
			formatted << " " << format(nums);
		}
	}
	if(badNums.str().empty()) { // 如果没有错误的数
		os << entry.name << " " << formatted.str() << endl;
	} else {
		cerr << "input error: " << entry.name << "invalid number(s)" << badNums.str() << endl;
	}
}

http://www.kler.cn/a/413370.html

相关文章:

  • 【5】STM32·FreeRTOS·临界段保护与调度器挂起
  • java脚手架系列16-AI大模型集成
  • MD5算法加密笔记
  • MySQL中的like模糊查询
  • 【计算机视觉+MATLAB】自动检测并可视化圆形目标:通过 imfindcircles 和 viscircles 函数
  • wireshark基础
  • AScript自动化脚本游戏辅助系列教程
  • els学习
  • 【MySQL】MySQL8.0新特性整理
  • docker部署nginx,并配置SSL证书
  • windows 应用 UI 自动化实战
  • 高级SQL技巧:解锁数据处理与分析的深层能力
  • python除了熟悉的pandas,openpyxl库也很方便的支持编辑Excel表
  • flink学习(5)——预定义source
  • linux安全管理-账号口令
  • 前端八股(自学笔记)分享—页面布局(四)
  • 讨论JAVA、JVM与Spring
  • nextjs+nestjs+prisma写todolist全栈项目
  • LeetCode—53. 最大子数组和(中等)
  • 【C/C++】数据库链接入门教程:从零开始的详细指南!MySQL集成与操作
  • 将自定义 AWS S3 快照存储库连接到 Elastic Cloud
  • zotero安卓测试版下载和使用
  • docker run创建容器如何执行多条命令
  • OpenCV图像基础处理:通道分离与灰度转换
  • 《Vue 初印象:快速上手 Vue 基础语法》
  • CSS笔记(三)卡片选择