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 阅读更多 →

最新新闻

STM32与CH9121实现Modbus TCP工业通信方案

STM32与CH9121实现Modbus TCP工业通信方案

1. 项目背景与核心需求在工业自动化领域,Modbus协议作为最常用的通信标准之一,其TCP变体因以太网的普及而日益重要。传统RS485串口设备要接入现代工业网络,通常需要可靠的串口转以太网解决方案。这正是我们基于STM32F103和CH9121网络模块开发…

2026/7/15 16:12:24 阅读更多 →
用ChatGPT 3分钟写出高转化商务邮件:从被忽略到获邀面试的5个关键公式

用ChatGPT 3分钟写出高转化商务邮件:从被忽略到获邀面试的5个关键公式

更多请点击: https://intelliparadigm.com 第一章:用ChatGPT 3分钟写出高转化商务邮件:从被忽略到获邀面试的5个关键公式 高转化率商务邮件不是靠堆砌礼貌用语,而是遵循可复用的心理触发结构。ChatGPT 并非万能草稿机——它需要精…

2026/7/15 16:10:24 阅读更多 →
ChatGPT生成用户画像的7个致命误区:92%的团队踩坑,第4个90%人至今未察觉

ChatGPT生成用户画像的7个致命误区:92%的团队踩坑,第4个90%人至今未察觉

更多请点击: https://intelliparadigm.com 第一章:ChatGPT生成用户画像的底层逻辑与风险本质 ChatGPT生成用户画像并非基于显式数据采集,而是通过对话上下文中的语言模式、偏好表达、提问结构、知识边界暴露及情感倾向等隐式信号进行概率推断…

2026/7/15 16:10:24 阅读更多 →
麻雀搜索算法优化BP神经网络预测以及MATLAB代码实现

麻雀搜索算法优化BP神经网络预测以及MATLAB代码实现

麻雀搜索算法SSA优化BP神经网络回归预测以及MATLAB代码实现 文章目录 麻雀搜索算法SSA优化BP神经网络回归预测以及MATLAB代码实现1. 麻雀搜索算法SSA原理1.1 算法灵感来源1.2 算法模型描述 2. SSA优化BP神经网络预测算法流程3. SSA优化BP回归预测的MATLAB实现步骤4. 运行结果与…

2026/7/15 16:08:21 阅读更多 →
Uncle小说阅读器:重新定义PC端数字阅读体验的三大技术突破

Uncle小说阅读器:重新定义PC端数字阅读体验的三大技术突破

Uncle小说阅读器:重新定义PC端数字阅读体验的三大技术突破 【免费下载链接】uncle-novel 📖 Uncle小说,PC版,一个全网小说下载器及阅读器,目录解析与书源结合,支持有声小说与文本小说,可下载mob…

2026/7/15 16:02:16 阅读更多 →
VS Code Git 工作树:解锁多分支并行开发新体验

VS Code Git 工作树:解锁多分支并行开发新体验

引言:多分支开发的痛点与 Git 工作树的曙光 传统 Git 分支切换的困扰:上下文丢失、环境冲突、效率低下。Git 工作树(Worktree)是什么?一个仓库,多个独立工作目录。VS Code 原生集成 Git 工作树:…

2026/7/15 16:02:16 阅读更多 →

日新闻

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 阅读更多 →

月新闻