sstream输入输出类继承自iostream类
. istringstream读取一个字符串
. ostringstream写入一个字符串

1. 可以使用iostream类的操作

sstream strm; //一个未绑定的stringstream
sstream strm(s); //strm持有一个string s,这个构造函数是explicit
strm.str(); //返回一个string的copy
strm.str(s); //将string复制进strm,返回void

stringstream构造函数会特别消耗内存,似乎不打算主动释放内存(或许是为了提高效率),但如果你要在程序中用同一个流,反复读写大量的数据,将会造成大量的内存消耗适时地清除一下缓冲 (用 stream.str("") )。

2. 字符串变基本数据类型

/字符串 变 double/
void static ioString1()
{
double n;
string str = “12.5”;
stringstream stream;
stream << str;
stream >> n;
cout << " " << n;
}
3. istringstream

 void static ioString2(){istringstream istr;string line, str;while (getline(cin, line))//从终端接收一行字符串,并放入字符串line中   {istr.str(line);//把line中的字符串存入字符串流中   while (istr >> str)//每次读取一个单词(以空格为界),存入str中   {cout << str << endl;}} }

4. ostringstream

 void static ioString3(){//初始化输出字符串流ostr   ostringstream ostr("1234");cout << ostr.str() << endl;//输出1234   ostr.put('5');//字符4顶替了1的位置   cout << ostr.str() << endl;//输出5234   ostr << "67";//字符串67替代了23的位置,输出5674   string str = ostr.str();cout << str << endl;}

4. istringstream + ostringstream :

struct PersonInfo {string name;vector<string> phones;};// we'll see how to reformat phone numbers in chapter 17// for now just return the string we're givenstatic string format(const string& s) { return s; }vector<PersonInfo> static getData(istream& is){// will hold a line and word from input, respectivelystring line, word;// will hold all the records from the inputvector<PersonInfo> people;// read the input a line at a time until end-of-file (or other error)while (getline(is, line)) {if (line.length() < 2)break;PersonInfo info;            // object to hold this record's dataistringstream record(line); // bind record to the line we just readrecord >> info.name;        // read the namewhile (record >> word)      // read the phone numbers info.phones.push_back(word);  // and store thempeople.push_back(info); // append this record to people}return people;}static ostream&  processOS(ostream& os, vector<PersonInfo> people){for (const auto& entry : people) {    // for each entry in peopleostringstream formatted, badNums; // objects created on each loopfor (const auto& nums : entry.phones) {  // for each number  // ``writes'' to formatted's stringformatted << " " << format(nums);}if (badNums.str().empty())      // there were no bad numbersos << entry.name << " "     // print the name << formatted.str() << endl; // and reformatted numbers else                   // otherwise, print the name and bad numberscerr << "input error: " << entry.name<< " invalid number(s) " << badNums.str() << endl;} return os;}static void  ioString4(){    vector<PersonInfo> vec = getData(cin);processOS(cout, vec);  }

【引用】

  1. 代码 https://github.com/thefistlei/cplusprimer/blob/main/cprimer/cprimer/ioTest.h

C++ Primer 5th笔记(8)chapter8 类:IO库-string流相关推荐

  1. C++ Primer 5th笔记(chap 17 标准库特殊设施)正则表达式类和输入序列类型

    1. 多种类型的输入 可以搜索多种类型的输入序列. RE 库为这些不同的输入序列类型都定义了对应的类型,eg. 普通 char 数据.wchar_t 数据 字符可以保存在标准库string或是 cha ...

  2. C++ Primer 5th笔记(chap 17 标准库特殊设施)未格式化的输入/输出操作

    1. 格式化IO 输入和输出运算符(<< 和>>)根据读取或写入的数据类型来格式化它们. 输入运算符忽略空白符 输出应用补白 精度等规则操作 2. 未格式化 IO (unfor ...

  3. C++ Primer 5th笔记(chap 17 标准库特殊设施)多字节低层IO操作

    1. 多字节操作 一些未格式化 IO 操作一次处理大块数据,这些操作要求我们自己分配并管理用来保存和提取数据的字符数组 操作 解释 is.get(sink, size, delim) 从is中读取最多 ...

  4. C++ Primer 5th笔记(chap 17 标准库特殊设施)bernoulli_distribution 类

    1. 定义 一个普通类, 而非模板. 此分布总是返回一个 bool 值. 它返回 true 的概率是一个常数, 此概率的默认值是 0.5 string resp; default_random_eng ...

  5. C++ Primer 5th笔记(chap 17 标准库特殊设施)IO库 之操纵符

    1. 控制浮点数格式 可以控制浮点数输出三个种格式 • 以多高精度( 多少个数字) 打印浮点值 • 数值是打印为十六进制. 定点十进制还是科学记数法形式 • 对于没有小数部分的浮点值是否打印小数点 1 ...

  6. C++ Primer 5th笔记(chap 17 标准库特殊设施)bitset类型

    1. 提取 bitset 的值 函数返回一个值,保存了与bitset 对象相同的位模式. to_ulong() // 返回unsigned long to_ullong() //返回unsigned ...

  7. C++ Primer 5th笔记(chap 17 标准库特殊设施)随机数

    1. 场景: rand 生成随机数 此函数生成均匀分布的伪随机整数, 每个随机数的范围在 0 和一个系统相关的最大值( 至少为 32767) 之间. 1.1 问题: 一些应用需要随机浮点数. 一些程序 ...

  8. C++ Primer 5th笔记(chap 17 标准库特殊设施)匹配标志

    1. 用来控制匹配和格式的标志 标准库还定义了用来在替换过程中控制匹配或格式的标志,这些标志可以传递给函数 regex_search 或 regex_match 或是类 smatch 的 format ...

  9. C++ Primer 5th笔记(chap 17 标准库特殊设施)正则表达式错误

    1. 指定或使用正则表达式时的错误 如果我们编写的正则表达式存在错误, 则在运行时标准库会抛出一个类型为regex 的异常 eg. try {// alnum右括号少了一个, 构造函数会抛出异常reg ...

最新文章

  1. 九章算法班L8 Array Number
  2. 分布式调用跟踪系统的设计和应用
  3. Serverless 场景下 Pod 创建效率优化
  4. C语言学习之输入4个整数,要求按由小到大的顺序输出。
  5. silverlight mediaElement 动态添加source
  6. Angular 服务器端渲染的学习笔记(二)
  7. 王道考研 计算机网络16网络层功能 数据交换方式 电路交换 报文交换 分组交换 路由算法 OSPF RIP AS自治系统 IGP内部网关协议 EGP外部网关协议
  8. 【django学习】request.POST与request.POST.get两者主要区别
  9. 论文浅尝 - AAAI2021 | 从历史中学习:利用时间感知拷贝生成网络建模时态知识图谱...
  10. zookeeper数据结构及Znode类型
  11. IAR7.51提示秘钥无效IAR 以及 CCDebug驱动(包含win7 64bit)
  12. secure连不上远程地址_[笔记]Mariadb安装并配置远程访问
  13. jquery $.get()、$.ajax()与后台servlet交互方法
  14. LeetCode 4. Median of Two Sorted Arrays
  15. 年轻人的第一台车“没了”,小米回应:新媒体同学抖错了机灵
  16. springboot sessionfactory_Spring Boot从入门到精通(五)多数据源配置实现及源码分析...
  17. 孙鑫VC学习笔记:第十一讲 (五) 如何使窗口具有滚动条
  18. 激光雷达的障碍物检测
  19. 坐标系投影转换CGCS2000坐标系(国家2000坐标系)等高线地形图
  20. [蓝桥杯解题报告]第九届蓝桥杯大赛省赛2018(软件类)真题C++A组 Apare_xzc

热门文章

  1. vue+springboot-前台怎么回显本地文件夹下的图片
  2. mysql求女生人数_在读女硕士110多万!为什么越来越多的女生选择考研?
  3. java长宽_Java:如何控制JPanel长宽比?
  4. 二阶矩阵转置怎么求_矩阵求导术(下)
  5. java reactor nio_java reactor与NIO
  6. “东数西算”工程正式启动,全面解读来了!
  7. 浅谈数据中心集成的优势
  8. windows10安装python环境_在windows10下安装python(配置环境变量),Windows10
  9. mysql partition赋权_mysql 创建用户及赋权
  10. Algorithm:【Algorithm算法进阶之路】之十大经典排序算法