C++ Primer 5th笔记(8)chapter8 类:IO库-string流
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); }
【引用】
- 代码 https://github.com/thefistlei/cplusprimer/blob/main/cprimer/cprimer/ioTest.h
C++ Primer 5th笔记(8)chapter8 类:IO库-string流相关推荐
- C++ Primer 5th笔记(chap 17 标准库特殊设施)正则表达式类和输入序列类型
1. 多种类型的输入 可以搜索多种类型的输入序列. RE 库为这些不同的输入序列类型都定义了对应的类型,eg. 普通 char 数据.wchar_t 数据 字符可以保存在标准库string或是 cha ...
- C++ Primer 5th笔记(chap 17 标准库特殊设施)未格式化的输入/输出操作
1. 格式化IO 输入和输出运算符(<< 和>>)根据读取或写入的数据类型来格式化它们. 输入运算符忽略空白符 输出应用补白 精度等规则操作 2. 未格式化 IO (unfor ...
- C++ Primer 5th笔记(chap 17 标准库特殊设施)多字节低层IO操作
1. 多字节操作 一些未格式化 IO 操作一次处理大块数据,这些操作要求我们自己分配并管理用来保存和提取数据的字符数组 操作 解释 is.get(sink, size, delim) 从is中读取最多 ...
- C++ Primer 5th笔记(chap 17 标准库特殊设施)bernoulli_distribution 类
1. 定义 一个普通类, 而非模板. 此分布总是返回一个 bool 值. 它返回 true 的概率是一个常数, 此概率的默认值是 0.5 string resp; default_random_eng ...
- C++ Primer 5th笔记(chap 17 标准库特殊设施)IO库 之操纵符
1. 控制浮点数格式 可以控制浮点数输出三个种格式 • 以多高精度( 多少个数字) 打印浮点值 • 数值是打印为十六进制. 定点十进制还是科学记数法形式 • 对于没有小数部分的浮点值是否打印小数点 1 ...
- C++ Primer 5th笔记(chap 17 标准库特殊设施)bitset类型
1. 提取 bitset 的值 函数返回一个值,保存了与bitset 对象相同的位模式. to_ulong() // 返回unsigned long to_ullong() //返回unsigned ...
- C++ Primer 5th笔记(chap 17 标准库特殊设施)随机数
1. 场景: rand 生成随机数 此函数生成均匀分布的伪随机整数, 每个随机数的范围在 0 和一个系统相关的最大值( 至少为 32767) 之间. 1.1 问题: 一些应用需要随机浮点数. 一些程序 ...
- C++ Primer 5th笔记(chap 17 标准库特殊设施)匹配标志
1. 用来控制匹配和格式的标志 标准库还定义了用来在替换过程中控制匹配或格式的标志,这些标志可以传递给函数 regex_search 或 regex_match 或是类 smatch 的 format ...
- C++ Primer 5th笔记(chap 17 标准库特殊设施)正则表达式错误
1. 指定或使用正则表达式时的错误 如果我们编写的正则表达式存在错误, 则在运行时标准库会抛出一个类型为regex 的异常 eg. try {// alnum右括号少了一个, 构造函数会抛出异常reg ...
最新文章
- 九章算法班L8 Array Number
- 分布式调用跟踪系统的设计和应用
- Serverless 场景下 Pod 创建效率优化
- C语言学习之输入4个整数,要求按由小到大的顺序输出。
- silverlight mediaElement 动态添加source
- Angular 服务器端渲染的学习笔记(二)
- 王道考研 计算机网络16网络层功能 数据交换方式 电路交换 报文交换 分组交换 路由算法 OSPF RIP AS自治系统 IGP内部网关协议 EGP外部网关协议
- 【django学习】request.POST与request.POST.get两者主要区别
- 论文浅尝 - AAAI2021 | 从历史中学习:利用时间感知拷贝生成网络建模时态知识图谱...
- zookeeper数据结构及Znode类型
- IAR7.51提示秘钥无效IAR 以及 CCDebug驱动(包含win7 64bit)
- secure连不上远程地址_[笔记]Mariadb安装并配置远程访问
- jquery $.get()、$.ajax()与后台servlet交互方法
- LeetCode 4. Median of Two Sorted Arrays
- 年轻人的第一台车“没了”,小米回应:新媒体同学抖错了机灵
- springboot sessionfactory_Spring Boot从入门到精通(五)多数据源配置实现及源码分析...
- 孙鑫VC学习笔记:第十一讲 (五) 如何使窗口具有滚动条
- 激光雷达的障碍物检测
- 坐标系投影转换CGCS2000坐标系(国家2000坐标系)等高线地形图
- [蓝桥杯解题报告]第九届蓝桥杯大赛省赛2018(软件类)真题C++A组 Apare_xzc
热门文章
- vue+springboot-前台怎么回显本地文件夹下的图片
- mysql求女生人数_在读女硕士110多万!为什么越来越多的女生选择考研?
- java长宽_Java:如何控制JPanel长宽比?
- 二阶矩阵转置怎么求_矩阵求导术(下)
- java reactor nio_java reactor与NIO
- “东数西算”工程正式启动,全面解读来了!
- 浅谈数据中心集成的优势
- windows10安装python环境_在windows10下安装python(配置环境变量),Windows10
- mysql partition赋权_mysql 创建用户及赋权
- Algorithm:【Algorithm算法进阶之路】之十大经典排序算法