流类库继承体系(IO流,文件流,串流)和 字符串流的基本操作
一、IO、流
数据的输入和输出(input/output简写为I/O)
对标准输入设备和标准输出设备的输入输出简称为标准I/O
对在外存磁盘上文件的输入输出简称为文件I/O
对内存中指定的字符串存储空间的输入输出简称为串I/O
数据输入输出的过程,可以形象地看成流
从流中获取数据的操作称为“提取”(输入)操作
向流中添加数据的操作称为“插入”(输出)操作
标准输入输出流
文件流
字符串流
二、流类库继承体系、四个输入输出对象
流库具有两个平行的基类:streambuf 和 ios 类,所有流类均以两者之一作为基类
streambuf 类提供对缓冲区的低级操作:设置缓冲区、对缓冲区指针操作区存/取字符
ios_base、ios 类记录流状态,支持对streambuf 的缓冲区输入/输出的格式化或非格式化转换
stringbuf:使用串保存字符序列。扩展 streambuf 在缓冲区提取和插入的管理
filebuf:使用文件保存字符序列。包括打开文件;读/写、查找字符
如下图:
C++为用户进行标准I/O操作定义了四个类对象: cin,cout,cerr和clog
cin为istream流类的对象,代表标准输入设备键盘,后三个为ostream流类的对象
cout代表标准输出设备显示器
cerr和clog含义相同,均代表错误信息输出设备显示器
三、ostream流 的操作,istream 流的操作
(一)、ostream流 的操作:
1、operator <<
<<操作返回一个ostream对象的引用,所以可以连续使用
2、put( )
输出单个字符
返回一个ostream对象的引用
cout.put(‘H’).put(‘i’);
3、write( )
write(buf, len)
write( )返回一个ostream对象的引用
cout.write (buf, len) //char buf[len]
1
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
#include <iostream>
using namespace std; int main(void) cout.put('H'); char buf[] = "test!!!!!"; return 0; |
(二)、istream流 的操作:
1、opeartor>>操作
<<操作返回一个ostream对象的引用,所以可以连续使用
2、get( )
get( )操作:
读取单个字符
返回一个整数
字符的ASCII码
get(char&)操作:
读取单个字符
返回一个istream对象的引用
3、getline( )
读取一行
遇到回车键
返回istream对象的引用
getline()操作与>>的区别:
char string1 [256],
cin.getline(string1, 256); //get a whole line, 以'\0'结尾
cin >> string1; //stop at the 1st blank space
4、read( )
read(buf, len)
返回一个istream对象的引用
对空白字符(包括'\n')照读不误
5、peek( ) 与 putpack()
peek:查看而不读取
putback:将一个字符添加到
1
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
#include <iostream>
using namespace std; int main(void) //int n; //cin>>n>>ch; //int ch = cin.get(); //char ch1; char buf[10] = {0}; //char buf[10] = {0}; //char buf[10] = {0}; /*char c[10], c2, c3; c2 = cin.get( ); return 0; |
二、字符串流的基本操作
istringstream,由istream派生而来,提供读string的功能
ostringstream,由ostream派生而来,提供写string的功能
stringstream,由iostream派生而来,提供读写string的功能
(一)、分割单词
1
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
#include <iostream>
#include <sstream> using namespace std; int main(void) while (getline(cin, line)) while (iss >> word) |
(二)、字符串与double 类型互相转换
1
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
#include <iostream>
#include <sstream> using namespace std; string doubletostr(double val) return oss.str(); // return string copy of character array double strtodouble(const string &str) int main(void) string str = doubletostr(val); str = "123.123"; } |
(三)、实现类似sscanf, sprinft 的功能
1
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
#include <iostream>
#include <sstream> using namespace std; int main(void) //192,168,0,100; //istringstream iss("192,168,0,100"); //ch = '.'; //cout<<oss.str()<<endl; string buf("192,168,0,100"); ch = '.'; cout << ss2.str() << endl; return 0; } |
输出为192.168.0.100
参考:
C++ primer 第四版
Effective C++ 3rd
C++编程规范
流类库继承体系(IO流,文件流,串流)和 字符串流的基本操作的更多相关文章
- java IO流的继承体系和装饰类应用
java IO流的设计是基于装饰者模式&适配模式,面对IO流庞大的包装类体系,核心是要抓住其功能所对应的装饰类. 装饰模式又名包装(Wrapper)模式.装饰模式以对客户端透明的方式扩展对象的 ...
- 从零开始学C++之IO流类库(三):文件的读写、二进制文件的读写、文件随机读写
一.文件的读写 如前面所提,流的读写主要有<<, >>, get, put, read, write 等操作,ofstream 继承自ostream, ifstream 继承自 ...
- 从零开始学C++之IO流类库(二):文件流(fstream, ifstream, ofstream)的打开关闭、流状态
一.文件流 ofstream,由ostream派生而来,用于写文件 ifstream,由istream派生而来, 用于读文件 fstream,由iostream派生而来,用于读写文件 二.打开文件 说 ...
- C++学习50 对字符串流的读写
文件流是以外存文件为输入输出对象的数据流,字符串流不是以外存文件为输入输出的对象,而以内存中用户定义的字符数组(字符串)为输入输出的对象,即将数据输出到内存中的字符数组,或者从字符数组(字符串)将数据 ...
- C# 基础知识系列- 14 IO篇 文件的操作
0. 前言 本章节是IO篇的第二集,我们在上一篇中介绍了C#中IO的基本概念和一些基本方法,接下来我们介绍一下操作文件的方法.在编程的世界中,操作文件是一个很重要的技能. 1. 文件.目录和路径 在开 ...
- JAVA之旅(三十)——打印流PrintWriter,合并流,切割文件并且合并,对象的序列化Serializable,管道流,RandomAccessFile,IO其他类,字符编码
JAVA之旅(三十)--打印流PrintWriter,合并流,切割文件并且合并,对象的序列化Serializable,管道流,RandomAccessFile,IO其他类,字符编码 三十篇了,又是一个 ...
- 第十四周总结 Io之文件流
I/O相关 输入/输出 流(数据流动) 数据流动的方向 读数据(输入input) 写数据(输出output) 文件流 字符流 数据流 对象流 网络流.... 1.什么叫文件 一种电脑的存储方式 文件有 ...
- java IO之字节流和字符流-Reader和Writer以及实现文件复制拷贝
接上一篇的字节流,以下主要介绍字符流.字符流和字节流的差别以及文件复制拷贝.在程序中一个字符等于两个字节.而一个汉字占俩个字节(一般有限面试会问:一个char是否能存下一个汉字,答案当然是能了,一个c ...
- Java文件(io)编程——文件字符流的使用
案例1: 读取一个文件并写入到另一个文件中,char[] 来中转. 首先要在E盘下创建一个文本文档,命名为test.txt,输入一些字符串. public class Demo_5 { public ...
随机推荐
- Android 新浪博客分享问题总结
分类: android(33) 版权声明:本文为博主原创文章,未经博主允许不得转载. 目录(?)[-] 我遇到BUG 1 sso package or singn error Bug2 ...
- Gradle Android最新自动化编译脚本教程
转自:http://blog.csdn.net/changemyself/article/details/39927381 一.前言 Gradle 是以 Groovy 语言为基础,面向Java应用为主 ...
- cas忽略地址配置
项目中需要忽略部分地址不需要cas验证,网上资料不多,结合cas源码,找到了配置方法:web.xml中增加ignorePattern配置.实际上是通过正则表达式来匹配. <filter> ...
- OpenCV特征点检测
特征点检测 目标 在本教程中,我们将涉及: 使用 FeatureDetector 接口来发现感兴趣点.特别地: 使用 SurfFeatureDetector 以及它的函数 detect 来实现检测过程 ...
- java 中函数的参数传递详细介绍
java中函数的参数传递 总结: 1.将对象(对象的引用)作为参数传递时传递的是引用(相当于指针).也就是说函数内对参数所做的修改会影响原来的对象. 2.当将基本类型或基本类型的包装集作为参数传递时 ...
- PowerDesigner概念设计模型(CDM)中的3种实体关系
CDM 是大多数开发者使用PD时最先创建的模型,也是整个数据库设计最高层的抽象.CDM是建立在传统的ER图模型理论之上的,ER图中有三大主要元素: 实体型,属性和联系.其中实体型对应到CDM中的Ent ...
- DGN格式转化为shp格式 【转】
其实本来,我就是需要把一个autocad的dwg/dgn格式的东西导入到google earth里面:但是首先我对dwg/dgn格式的东西根本就不熟:其次我拿到的dwg/dgn格式文件是用的HK80 ...
- json 数组操作
用js有很久了,但都没有深究过js的数组形式.这段时间做的一个项目,用到数组的地方很多,自以为js还可以的自己居然无从下手,一下狠心,我学!呵呵. 1.数组的创建 var arrayObj = new ...
- Asp 将MSXML2.serverXMLHTTP返回的responseBody 内容转换成支持中文编码
参考:ASP四个小技巧,抓取网页:GetBody,字节转字符BytesToBstr,正则表达式测试方法,生成静态页 Function GetBody(weburl) '创建对象 Dim ObjXMLH ...
- 怎样改动android系统字体大小
改动字体大小的方法是运用到一个ActivityManagerNative类 首先先在代码宣告 private Configuration mconfig = new Configuration(); ...