stringstream的应用场景
stringstream是 C 标准库sstream中提供的一个非常实用的类核心作用是把字符串当作 “流” 来处理实现字符串和各种数据类型如 int、float 等之间的灵活转换以及字符串的拆分 / 拼接。一、stringstream 核心作用与基础用法1. 先明确核心概念stringstream本质是 “内存中的字符串流”可以像操作cin输入流、cout输出流一样操作它往stringstream里写入数据如数字转字符串从stringstream里读取数据如字符串转数字拆分带分隔符的字符串如按空格 / 逗号拆分。2. 必备前置条件使用stringstream必须包含头文件#include sstream // 核心头文件 #include string // 处理字符串 #include iostream // 用于输出测试 using namespace std; // 新手可简化代码避免频繁写 std::二、常用场景与完整代码示例场景 1数字转字符串最常用把 int、float、double 等数值类型转换成字符串比手写拼接更简洁、不易出错。// 数字转字符串 void number_to_string() { int num 123; float f 3.1415; stringstream ss; // 方式1逐个写入 ss 整数 num 浮点数 f; string result ss.str(); // str() 方法获取流中的完整字符串 cout 拼接结果 result endl; // 方式2单独转换单个数字 stringstream ss2; ss2 num; string num_str ss2.str(); cout 仅整数转字符串 num_str endl; }输出结果拼接结果整数123浮点数3.1415仅整数转字符串123场景 2字符串转数字把表示数字的字符串如 456、7.89转换成对应的数值类型比atoi更通用支持更多类型。// 字符串转数字 void string_to_number() { string str_num 456; string str_float 7.89; int n; double d; // 字符串转int stringstream ss1(str_num); // 初始化时传入字符串 ss1 n; // 从流中读取到int变量 cout 字符串转int n endl; // 字符串转double stringstream ss2(str_float); ss2 d; cout 字符串转double d endl; }输出结果字符串转int456字符串转double7.89场景 3拆分带分隔符的字符串比如把 hello world 123 按空格拆分或把 1,2,3,4 按逗号拆分。// 拆分字符串按空格/逗号 void split_string() { // 示例1按空格拆分 string str1 apple banana orange; stringstream ss1(str1); string word; cout 按空格拆分结果 endl; while (ss1 word) { // 会自动以空格/换行作为分隔符 cout word endl; } // 示例2按逗号拆分需先替换逗号为空格再拆分 string str2 1,2,3,4,5; stringstream ss2; // 先替换逗号为空格 for (char c : str2) { if (c ,) c ; } ss2.str(str2); // 给流设置处理后的字符串 int num; cout 按逗号拆分结果 endl; while (ss2 num) { cout num endl; } }输出结果按空格拆分结果applebananaorange按逗号拆分结果12345场景 4复用 stringstream清空流如果想重复使用同一个stringstream对象需要用clear()清空状态 str()清空内容// 复用 stringstream void reuse_stringstream() { stringstream ss; // 第一次使用 ss 123; string s1 ss.str(); cout 第一次使用 s1 endl; // 清空必须同时做这两步 ss.clear(); // 清空流的状态如eof、fail等 ss.str(); // 清空流中的字符串内容 // 第二次使用 ss hello; string s2 ss.str(); cout 第二次使用 s2 endl; }输出结果第一次使用123第二次使用hello总结stringstream是 C 处理字符串与数值转换、字符串拆分的核心工具需包含sstream头文件核心操作写入数据转字符串、读取数据转数值、str()获取 / 设置流中的字符串复用流时必须同时调用clear()清状态和str()清内容否则会出现数据残留问题。它的优势是类型安全相比 C 语言的sprintf/atoi、用法灵活是 C 中处理字符串的首选方式之一。例题L1-6 这不是字符串题#includebits/stdc.h using namespace std; // 辅助函数将字符串序列转为整数数组 vectorint str_to_nums(const string s) { vectorint nums; stringstream ss(s); int num; while (ss num) { nums.push_back(num); } return nums; } // 辅助函数将整数数组转为字符串序列 string nums_to_str(const vectorint nums) { string s; for (int i 0; i nums.size(); i) { s to_string(nums[i]); if (i ! nums.size() - 1) { s ; } } return s; } // 辅助函数在数组中查找连续子序列操作1 int find_subsequence(const vectorint nums, const vectorint sub) { if (sub.empty() || nums.size() sub.size()) return -1; for (int i 0; i nums.size() - sub.size(); i) { bool match true; for (int j 0; j sub.size(); j) { if (nums[ij] ! sub[j]) { match false; break; } } if (match) return i; } return -1; } int main() { ios::sync_with_stdio(false); // 关闭同步加速cin/cout cin.tie(nullptr); // 解绑cin和cout int n, m; if (!(cin n m)) return 0; // 第一步读取初始序列转为数组存储核心优化 vectorint nums(n); for (int i 0; i n; i) { cin nums[i]; } while (m--) { int x; cin x; // 操作1替换连续子序列 if (x 1) { int l1; cin l1; vectorint sub1(l1); for (int i 0; i l1; i) { cin sub1[i]; } int l2; cin l2; vectorint sub2(l2); for (int i 0; i l2; i) { cin sub2[i]; } // 查找子序列位置 int pos find_subsequence(nums, sub1); if (pos ! -1) { // 替换删除原序列插入新序列 nums.erase(nums.begin() pos, nums.begin() pos l1); nums.insert(nums.begin() pos, sub2.begin(), sub2.end()); } } // 操作2相邻和为偶数则插入平均数 else if (x 2) { // 从后往前遍历避免插入后影响后续索引 for (int i nums.size() - 2; i 0; --i) { int l nums[i]; int r nums[i1]; if ((l r) % 2 0) { int av (l r) / 2; nums.insert(nums.begin() i 1, av); } } } // 操作3截取区间逆序后替换 else { int l, r; // 闭区间数字位置从1开始 cin l r; if (l r) continue; // 转换为数组索引从0开始 int start l - 1; int end r - 1; // 逆序区间内的元素 reverse(nums.begin() start, nums.begin() end 1); } } // 输出最终序列 cout nums_to_str(nums) endl; return 0; }

相关新闻

如何确定合适的漆雾凝聚剂使用比例

如何确定合适的漆雾凝聚剂使用比例

在涂装、家具制造等行业的污水处理中,漆雾凝聚剂是破解漆雾污染难题的核心药剂。其通过A剂破黏、B剂凝聚的协同作用,实现漆渣与水的快速分离。然而,使用漆雾凝聚剂使用比例的准确把控直接影响处理效果与成本——投加量不足会导致漆渣上浮率低…

2026/7/12 15:17:35 阅读更多 →
最近在搞无刷直流电机控制的项目,发现很多新手卡在六步换相法的实现上。今天咱们用Simulink撸个仿真模型,手把手看看电流到底是怎么“跳踢踏舞“让电机转起来的

最近在搞无刷直流电机控制的项目,发现很多新手卡在六步换相法的实现上。今天咱们用Simulink撸个仿真模型,手把手看看电流到底是怎么“跳踢踏舞“让电机转起来的

六步逆变器供电的无刷直流电机控制仿真模型,simulink,bldc。 先上硬货——整个模型的核心是换相逻辑。在Simulink里用Truth Table模块直接定义六个换相状态,比用脚本写直观多了。比如这段真值表配置: % 霍尔信号与功率管导通关系…

2026/7/13 20:04:06 阅读更多 →
如何高效解决 Java 内存泄漏问题方法论

如何高效解决 Java 内存泄漏问题方法论

好的,我们来深入探讨 Java 内存泄漏问题的识别与解决方法论,不仅告诉你“做什么”,更讲“为什么”和“怎么做”,让你能系统化应对内存泄漏。 1. 内存泄漏的本质 在 Java 中,内存泄漏并不是内存永远无法释放&#xff0…

2026/7/15 2:36:48 阅读更多 →

最新新闻

Krpano进阶-多场景漫游与动态热点交互实战

Krpano进阶-多场景漫游与动态热点交互实战

1. Krpano多场景漫游基础搭建 第一次接触Krpano多场景项目时,我被它强大的场景串联能力惊艳到了。想象一下,你正在为某个景区制作虚拟导览,游客只需点击热点就能在不同景点间自由切换,这种体验比传统平面地图直观太多。 环境准备…

2026/7/15 17:01:20 阅读更多 →
Checkpoint终极指南:高效管理3DS与Switch游戏存档的完整解决方案

Checkpoint终极指南:高效管理3DS与Switch游戏存档的完整解决方案

Checkpoint终极指南:高效管理3DS与Switch游戏存档的完整解决方案 【免费下载链接】Checkpoint Fast and simple homebrew save manager for 3DS and Switch. 项目地址: https://gitcode.com/gh_mirrors/ch/Checkpoint 你是否曾因游戏进度丢失而痛心疾首&…

2026/7/15 17:01:20 阅读更多 →
【算法精讲】双鱼眼全景拼接中的光照补偿与接缝融合实战

【算法精讲】双鱼眼全景拼接中的光照补偿与接缝融合实战

1. 双鱼眼全景拼接的挑战与核心问题第一次尝试用双鱼眼相机做全景拼接时,我被接缝处那道明显的"分界线"惊到了——左边图像偏蓝调,右边却泛着黄光,就像把两张完全不同的照片强行粘在一起。这种光照差异和接缝突兀的问题&#xff0c…

2026/7/15 16:59:20 阅读更多 →
计算机毕业设计之jsp星动体育馆场地预约管理系统的设计与实现

计算机毕业设计之jsp星动体育馆场地预约管理系统的设计与实现

当今社会已经步入了科学技术进步和经济社会快速发展的新时期,国际信息和学术交流也不断加强,计算机技术对经济社会发展和人民生活改善的影响也日益突出,人类的生存和思考方式也产生了变化。传统星动体育馆场地预约采取了人工的管理方法&#…

2026/7/15 16:59:19 阅读更多 →
小程序毕业设计-基于 SpringBoot的游戏攻略分享小程序 基于 SpringBoot + 微信小程序的游戏资讯攻略交流平台(源码+LW+部署文档+全bao+远程调试+代码讲解等)

小程序毕业设计-基于 SpringBoot的游戏攻略分享小程序 基于 SpringBoot + 微信小程序的游戏资讯攻略交流平台(源码+LW+部署文档+全bao+远程调试+代码讲解等)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

2026/7/15 16:50:36 阅读更多 →
Dism++深度解析:Windows系统维护的终极解决方案

Dism++深度解析:Windows系统维护的终极解决方案

Dism深度解析:Windows系统维护的终极解决方案 【免费下载链接】Dism-Multi-language Dism Multi-language Support & BUG Report 项目地址: https://gitcode.com/gh_mirrors/di/Dism-Multi-language 你是否曾经面对Windows系统越来越慢的困扰&#xff1f…

2026/7/15 16:48:36 阅读更多 →

日新闻

YOLO11 改进 - 特征融合 | STFFM空间时间特征融合模块,强化时空互补、抑制噪声,助力小目标检测高效涨点

YOLO11 改进 - 特征融合 | STFFM空间时间特征融合模块,强化时空互补、抑制噪声,助力小目标检测高效涨点

前言 本文介绍了面向红外小目标检测的时空特征融合模块——STFFM,用于增强复杂背景下目标与噪声、杂波的区分能力。该方法通过拼接空间特征与时间/运动特征,并结合通道注意力、空间注意力和残差增强机制,实现对关键语义通道与疑似目标区域的…

2026/7/15 0:01:00 阅读更多 →
YOLO26 改进 - 特征融合 | STFFM空间时间特征融合模块,强化时空互补、抑制噪声,助力小目标检测高效涨点

YOLO26 改进 - 特征融合 | STFFM空间时间特征融合模块,强化时空互补、抑制噪声,助力小目标检测高效涨点

前言 本文介绍了面向复杂背景小目标检测的时空特征融合模块——STFFM。该模块通过空间分支与时间/运动分支的特征拼接,引入通道注意力和空间注意力对融合特征进行自适应筛选,并结合残差增强与通道压缩,突出目标区域、抑制背景噪声。我们将 S…

2026/7/15 0:01:00 阅读更多 →
行星减速机为什么能提高扭矩?从功率守恒到输出扭矩校核

行星减速机为什么能提高扭矩?从功率守恒到输出扭矩校核

一、为什么减速以后扭矩会增大 旋转机械的功率、转速和扭矩之间存在以下关系: T 9550 P n 其中: T为扭矩,单位Nm; P为功率,单位kW; n为转速,单位r/min。 在功率基本不变的情况下:…

2026/7/15 0:03:00 阅读更多 →

周新闻

互联网大厂 Java 求职面试:燕双非的搞笑回答与技术探讨

互联网大厂 Java 求职面试:燕双非的搞笑回答与技术探讨

互联网大厂 Java 求职面试:燕双非的搞笑回答与技术探讨 在一个阳光明媚的上午,互联网大厂的面试官坐在桌前,准备迎接他的面试候选人——燕双非,一个以搞笑和幽默著称的程序员。第一轮提问 面试官:燕双非,作…

2026/7/14 16:53:23 阅读更多 →
车载以太网PMA测试设备选型:示波器、VNA、信号源3类仪器关键参数与预算评估

车载以太网PMA测试设备选型:示波器、VNA、信号源3类仪器关键参数与预算评估

车载以太网PMA测试设备选型:示波器、VNA、信号源3类仪器关键参数与预算评估在智能驾驶和车联网技术快速发展的今天,车载以太网作为新一代车载网络的核心传输技术,其物理层性能直接决定了数据传输的可靠性和稳定性。1000BASE-T1作为当前主流的…

2026/7/14 14:00:13 阅读更多 →
VSCode EIDE 插件 2.0:APM32/STM32 项目迁移实战,5步完成Keil工程转换

VSCode EIDE 插件 2.0:APM32/STM32 项目迁移实战,5步完成Keil工程转换

VSCode EIDE 插件 2.0:APM32/STM32 项目迁移实战指南嵌入式开发领域正经历一场工具链的静默革命。当传统Keil用户首次打开VSCode的扩展市场搜索EIDE时,往往会惊讶于这个看似简单的插件竟能重构十余年的开发习惯。本文将揭示如何用五个精准步骤&#xff0…

2026/7/14 7:15:24 阅读更多 →

月新闻