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

C++ istringstream

1. istringstream是什么
2. 它的 “规则” 是什么?
3. 什么能分割,什么不能分割?
4. 基本用法:按空白符分割
5. 实践练习
6. 学习要点总结

一. istringstream是什么

istringstream:字符串的流式读取器(简明扼要

1️⃣ 一本书 📚

string line="Hello World C++";

就像一本合上的书,文字都在里面,但无法逐页阅读。

2️⃣ 阅读器 📱

istringstreamiss(line);

就像把书放入电子阅读器,现在可以一页页翻看了!

3️⃣ 翻页阅读 👆

iss>>word;// 读取一个单词

🎬 完整过程演示

string book="The quick brown fox";istringstreamreader(book);// 放入阅读器string page;reader>>page;// 翻到第1页: "The"reader>>page;// 翻到第2页: "quick"reader>>page;// 翻到第3页: "brown"reader>>page;// 翻到第4页: "fox"

学习要点总结

书 → 阅读器 → 翻页 = 字符串 → istringstream → >> 操作符

  • 阅读器让静态文字变成可流动阅读的内容
  • 每次翻页(>>)自动处理多余空白
  • 阅读器知道什么时候读完(流状态)

二.它的 “规则” 是什么?

操作符的默认行为:

  1. 跳过前导的空白字符(空格、制表符、换行符等)
  2. 读取直到遇到下一个空白字符
  3. 不包含空白字符本身

三.什么能分割,什么不能分割?

✅ 能自动处理的情况:

cpp"a b c"// → "a", "b", "c" (多个空格)" hello world "// → "hello", "world" (前后空格)"one\ttwo\nthree"// → "one", "two", "three" (制表符、换行符)

❌ 不能直接处理的情况:

cpp// 1. 按逗号分割"apple,banana,cherry"// → 会得到 "apple,banana,cherry" (整个字符串)// 而不是 "apple", "banana", "cherry"// 2. 按特定字符分割"192.168.1.1"// → 会得到 "192.168.1.1" (整个字符串)// 而不是 "192", "168", "1", "1"// 3. 保留空字段"a,,c"// → 会得到 "a", "c" (跳过空字段)// 而不是 "a", "", "c"

如果要 “随意分割” 怎么办?
对于复杂的分割,需要 std::getline + 分隔符:

cpp#include<iostream>#include<sstream>#include<string>intmain(){std::string data="apple,banana,cherry";std::istringstreamiss(data);std::string fruit;// 按逗号分割while(std::getline(iss,fruit,',')){std::cout<<fruit<<std::endl;}// 输出:// apple// banana// cherryreturn0;}

四.基本用法:按空白符分割

cpp string text="C++ is awesome!";istringstreamiss(text);string word;while(iss>>word){// >> 操作符自动跳过空格cout<<word<<endl;}// 输出:// C++// is// 练习1:单词计数器

处理多种数据类型

cpp string info="Alice 25 165.5 true";istringstreamiss(info);string name;intage;doubleheight;boolenrolled;iss>>name>>age>>height>>enrolled;

五.实践练习

练习2:成绩计算器

cpp string scores="85 92 78 88 95";istringstreamiss(scores);intscore,total=0,count=0;while(iss>>score){total+=score;count++;}cout<<"平均分: "<<(double)total/count<<endl;

练习3:提取数字

cpp string mixed="abc 123 def 456 ghi";istringstreamiss(mixed);string token;intnumber;while(iss>>token){istringstreamtemp_iss(token);if(temp_iss>>number){cout<<"找到数字: "<<number<<endl;}}

练习3:单词排序与去重

cpp string text="apple banana apple orange banana";istringstreamiss(text);string word;set<string>unique_words;while(iss>>word){unique_words.insert(word);}// unique_words: {"apple", "banana", "orange"}

✅ 学习要点

  1. istringstream 将字符串转换为可读取的流
  2. 操作符按空白符分割并自动类型转换
  3. 适用于格式规范的文本解析
  4. 配合getline() 可实现按指定分隔符分割
  5. 是 C++ 中处理字符串分割的优雅解决方案
http://www.jsqmd.com/news/207043/

相关文章:

  • XUnity Auto Translator:打破语言壁垒,让外语游戏无障碍畅玩
  • python基于django的小程序 大学生食堂餐厅点餐系统_1312vhtr
  • 使用LaTeX撰写ms-swift技术文档提升公式表达质量
  • ms-swift支持序列分类任务构建情感分析解决方案
  • python基于django的小程序 宠物服务系统_宠物托运系统 宠物用品商城系统s8s5b3d6
  • 学长亲荐8个一键生成论文工具,本科生轻松搞定毕业论文!
  • 通过FastStone Capture注册码获取截图工具辅助调试
  • python基于django的小程序 宠物领养系统_c27l9jc8
  • HBase数据模型详解,解锁大数据存储奥秘
  • python基于django的微信小程序的家政服务评价平台的设计与实现_家庭保洁预约系统25s7qom8
  • Plate:一款基于 React 和 Slate.js 的现代化富文本编辑器框架
  • python基于django的小程序 基于协同过滤算法的校园服务平台_校园活动报名系统2qt0p731
  • 基于Simulink的基于IMU与编码器融合的姿态估计仿真
  • 基于Simulink的自适应模糊PI-MPPT控制仿真
  • python基于django的小程序 小区果蔬商城_社区买菜系统qh07pw60
  • SPA首屏加载速度慢的怎么解决
  • python基于django的小程序 师生互动桥系统_学生作业考试管理系统n9485x0l
  • 多模态大模型有哪些模态?
  • python基于django的小程序 思政考核管理系统_cv4lm54k
  • 安科瑞智慧能源平台赋能光储电站容量优化与协调控制
  • python基于django的小程序 消防知识学习平台系统_消防器材识别系统h9kuq6fk
  • 从规模到智能:大模型架构演进全指南(值得收藏学习)
  • python基于django的小程序 社区老年人健康管理系统_y37l6l9x
  • 云看展 CES 的最佳姿势出现了! 4177 家 CES 展商完整列表丨社区项目推荐
  • 华为OD面试手撕真题 - 爱吃香蕉的珂珂
  • python基于django的小程序 零工市场服务系统_87366b99
  • 学Simulink--基础MPPT控制场景实例:基于Simulink的自适应模糊PI-MPPT控制仿真
  • 掌握数据可视化:从基础到实战的完整指南
  • Windows 下升级 R 语言至最新版
  • Pulse news stream Beta冲刺博客