这篇“C++中IO流操作实例分析”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“C++中IO流操作实例分析”文章吧。
cin实际上是一个标准输入流对象(类对象),常用的方式有,cin>>(cin.operator>>()), cin.get(), cin.getline()(用法:cin.getline(char s[], int nLength))
或者在std命名空间下,有一个单独的getline()函数,但是该函数时使用string对象作为参数的,即:getline(cin, str)
cout是标准输出流对象(类对象),cout<<
cout cin printf scanf(格式化输入输出)比较
总结:c++中尽量用cin和cout
//c_str()就是把string类对象转换成和c兼容的char*类型。 //这是为了与c语言兼容,在c语言中没有string类型 //故必须通过string类对象的成员函数c_str()把string 对象转换成c中的字符串样式 //例如 string a = "hellofjifj"; printf("%s\n", a.c_str()); //printf("%s\n", a);//这样会有问题
在文件流中提供了三个派生类对文件数据进行操作(注意这里是类,不像控制台提供的是类对象)
ofstream:输出,即写文件,由ostream引申而来
ifstream:输入,即读取文件,由istream引申而来
fstream :输入输出,同时读写操作,由iostream引申而来
文件的类型:文本文件 和 二进制文件
文件读写的步骤:
包含的头文件:#include <fstream>
创建流
打开文件(文件和流关联)
读写 (写操作:<<,put( ),write( )读操作:>> , get( ),getline( ), read( ))
关闭文件:把缓冲区数据完整地写入文件, 添加文件结束标志, 切断流对象和外部文件的连接
<< 能实现以行为单位写入文件
>> 不能一行为单位读入内存,而是以单词为单位。总是以空格、Tab、回车结束
ofstream OpenFile("file.txt"); if (OpenFile.fail()) { cout<<"打开文件错误!"<<endl; exit(0); } OpenFile << "abc def ghi";//把内容写入file文件 OpenFile.close();
const int len=20; char str[len]; ifstream OpenFile("file.txt"); if (OpenFile.fail()) { cout<<"打开文件错误!"<<endl; exit(0); } OpenFile >> str; cout << str << endl; OpenFile.close(); //str的内容为abc,而不是abc def ghi(见空格停止)
getline():以行为单位读入内存,能一次读入一行
函数原型:istream &getline( char *buffer, streamsize num );
getline( )函数用于从文件读取num个字符到buffer(内存)中,直到下列情况发生时,读取结束:
num个字符已经读入
碰到一个换行标志
碰到一个EOF
const int len=20; char str[len]; ifstream OpenFile("file.txt"); if (OpenFile.fail()) { cout<<"打开文件错误!"<<endl; exit(0); } OpenFile.getline(str,20); cout << str << endl; OpenFile.close();//运行结果:str的内容为abc def ghi (一直把一行读完)
ostream& put (char c);
函数功能:使用 put( )函数,向文件中写入字符
char ch='1'; ofstream OpenFile("file.txt"); if (OpenFile.fail()) { cout<<"打开文件错误!"<<endl; exit(0); } OpenFile.put(ch); // 把字符1写入文件 OpenFile.close();
istream& get (char& c);
函数功能:使用 get( )函数,从文件中读取字符
char ch; ifstream OpenFile("file.txt"); if (OpenFile.fail()) { cout<<"打开文件错误!"<<endl; exit(0); } OpenFile.get(ch); cout << ch; //把字符1从文件中读到ch(内存)中 OpenFile.close();
ofstream &put(char ch)
在内存中写入一个字节到文件
char ch='a'; ofstream OpenFile("file.txt",ios::binary); //以二进制的方式处理,在打开时要用 ios::binary 显式声明 if (OpenFile.fail()) { cout<<"打开文件错误!"<<endl; exit(0); } OpenFile.put(ch); OpenFile.close();
ifstream &get(char ch)
在文件中读取一个字节到内存
char ch; ifstream OpenFile("file.txt",ios::binary); if (OpenFile.fail()) { cout<<"打开文件错误!"<<endl; exit(0); } OpenFile.get(ch); // 从文件中读取一个字符 cout << ch; OpenFile.close();
ostream & ostream :: write ( char * buf , int n ) ;
功能:把buf指向的内容取n个字节写入文件
参数说明:buf表示要写入内存的地址,传参时要取地址。n表示要读入字节的长度
注意:
该函数遇到空字符时并不停止,因而能够写入完整的类结构
第一个参数一个char型指针(指向内存数据的起始地址),与对象结合使用的时候,要在对象地址之前要char做强制类型转换
char ch[12]="12 3 456 78"; ofstream OpenFile("file.txt"); if (OpenFile.fail()) { cout<<"打开文件错误!"<<endl; exit(0); } OpenFile.write(ch, 12); OpenFile.close();
istream & read ( char * buf , int n ) ;
功能:从文件中提取 n 个字节数据,写入buf指向的地方中
char ch[12]; ifstream OpenFile("file.txt"); if (OpenFile.fail()) { cout<<"打开文件错误!"<<endl; exit(0); } OpenFile.read(ch,12); cout << ch; //运行结果:数组ch的内容为12 3 456 78 OpenFile.close();
(1)程序不再使用文件时,为什么要关闭文件?
因为:
文件缓冲区是一块小的内存空间.
操作系统限制同时打开的文件数量
注意:close ( ) 函数关闭文件,但流对象仍然存在。
(2)文件的默认打开方式为文本文件,要是想以二进制的方式处理,在打开时要用 ios::binary 显式声明。
(3)针对文本文件操作时,get函数和>>的区别:
在读取数据时,get函数包括空白字符(遇空白字符不停止读取)
>>在默认情况下拒绝接受空白字符(遇到空白符停止读取)
(4)文本文件的读写常使用的方法:使用<<写入文件,使用getline 和 >> 读到内存
二进制文件的读写常使用的方法:使用istream 类的成员函数read 和write 来实现,
其相应的派生类有istringstream类、ostringstream类、iostringstream类
其实是整型和字符创类型的相互转化:序列化(转成字符串)和反序列化(将字符串中数据提取处理)
C当中用法:sprintf和sscanf函数
C++中用法:字符串流
struct ServerInfo//要读些的信息类 { char _ip[20]; int _port; }; //C当中用法 //将info中数据转成字符串并存入buff中 ServerInfo info = { "192.0.0.1", 8000 }; char buff[128];//buff的大小不好确定 sprintf_s(buff, "%s %d", info._ip, info._port);// 序列化,转成字符串存入buff中 //将buff中数据格式化输出到rinfo中 ServerInfo rinfo; sscanf(buff, "%s%d", rinfo._ip, &rinfo._port);// 反序列化,将字符串buff中数据转成规定格式 //空格间隔开了
//C++用法 //将info中数据转成字符串并存到buff中 ServerInfo info = { "192.0.0.1", 8000 }; stringstream ssm;//字符串流对象 ssm << info._ip <<" "<<info._port;//转成字符串 string buff = ssm.str();//查看字符串 //从字符串提取至rinfo stringstream ssm; ssm.str("127.0.0.1 90");//这两行直接按照下面的写法也行 //stringstream ssm("127.0.0.1 90"); ServerInfo rinfo; ssm >> rinfo._ip >> rinfo._port;
atoi(c库函数、ascll to integer)
strtol(c库函数,字符串转成长整型)
stoi(stoi是C++的函数,头文件:#include < string >)
itoa(c库函数)
to_string(C++11的函数,可以适应8种类型的重载,将其转换为string,头文件:#include < string >)
以上就是关于“C++中IO流操作实例分析”这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注亿速云行业资讯频道。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。