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

news/2024/12/5 5:41:45/

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 {// 将格式化的字符串写入 formattedformatted << " " << 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.ppmy.cn/news/1551329.html

相关文章

【MATLAB源码-第226期】基于matlab的64QAM系统相位偏移估计HOS算法仿真,对比补偿前后的星座图误码率。

操作环境&#xff1a; MATLAB 2022a 1、算法描述 高阶统计量&#xff08;HOS&#xff09;频偏估计算法 高阶统计量&#xff08;Higher Order Statistics, HOS&#xff09;频偏估计算法是一种先进的信号处理技术&#xff0c;广泛应用于现代数字通信系统中&#xff0c;以应对和…

【小白学机器学习41】如何从正态分布的总体中去抽样? 获得指定正态分布的样本的2种方法

目录 1 目标&#xff1a;使用2种方法&#xff0c;去从正态分布的总体中去抽样&#xff0c;获得样本 1.1 step1: 首先&#xff0c;逻辑上需要先有符合正态分布的总体population 1.2 从总体中取得样本&#xff0c;模拟抽样的过程 2 从正态分布抽样的方法1 3 从正态分布抽样…

mac maven编译出现问题

背景 进行maven install 命令&#xff0c;报错&#xff1a; [ERROR] COMPILATION ERROR : [INFO] ------------------------------------------------------------- [ERROR] No compiler is provided in this environment. Perhaps you are running on a JRE rather than a J…

C#中面试的常见问题008

1.内存泄露 内存泄露的原因&#xff1a; 未释放动态分配的内存&#xff1a;在使用malloc、new等动态内存分配函数后&#xff0c;未能正确释放内存。引用计数错误&#xff1a;在引用计数管理内存的语言中&#xff0c;增加引用计数但未相应减少&#xff0c;导致内存无法释放。循…

格网法计算平面点云面积(matlab版本)

1、原理介绍 格网法计算平面点云面积&#xff0c;其思想类似高中油膜法计算面积。其将点云投影到水平面&#xff0c;再将点云划分成尺寸相同的格网。最后&#xff0c;统计格网内包含点的数量number&#xff0c;那么可利用如下公式计算得到点云的面积&#xff1a; Aeranumber*L…

SpringBoot 项目中使用 spring-boot-starter-amqp 依赖实现 RabbitMQ

文章目录 前言1、application.yml2、RabbitMqConfig3、MqMessage4、MqMessageItem5、DirectMode6、StateConsumer&#xff1a;消费者7、InfoConsumer&#xff1a;消费者 前言 本文是工作之余的随手记&#xff0c;记录在工作期间使用 RabbitMQ 的笔记。 1、application.yml 使…

容器第二天(day039)

1.jq处理json格式数据 使用场景&#xff1a;docker inspect出来的结果是json格式数据 安装&#xff1a;yum install -y jq 用法&#xff1a;docker inspect nginx:alpine |jq .[].GraphDriver.Data.WorkDir 遇到[]&#xff0c;则.[]。 2.容器管理 运行起来的镜像可以成为容…

【linux】重定向

linux重定向 从定义上来看&#xff0c;Linux重定向就是指修改原来默认的一些东西&#xff0c;对原来系统命令的默认执行方式进行改变&#xff0c;比如说简单的我不想看到在显示器的输出而是希望输出到某一文件中就可以通过Linux重定向来进行这项工作。在进一步探索重定向之前&…