1.写入文件
https://blog.csdn.net/naibozhuan3744/article/details/78678571
//详情请看此链接
2.读取文件
知识点:
①要利用ifstream这个类,这个类里面有good(),getline()等函数,用的时候先要定义一个Ifstream类的成员,如ifstream ifile (“data.txt”)//定义了一个IFstream类成员 ifile, 指向的是data.txt这个文件 ,然后就可以直接用ifilie.good(),ifile.getline()
②ifstream.good()函数是用来读取判断文件里面是否还有内容即是否出错,有的话就返回1,没有的话就返回0;iftream.getline()函数是读文件中的数据,如ifile.getline(line,length);//第一个参数line是一个字符数组,第二个参数length是读取文件中每一行不超过的长度,这个函数的意思是,逐行读取Ifile文件里的数据,并存入到line这个字符数组中,每一行长度不超过length,遇到回车键结束
③puts()函数,puts()函数用来向标准输出设备(屏幕)输出字符串并换行,具体为:把字符串输出到标准输出设备,将’\0’转换为回车换行。其调用方式为,puts(s);其中s为字符串字符(字符串数组名或字符串指针)
④getline函数:成员函数getline()是从输入流中读取一行字符,读到终止符时会将’0’(即空白符)存入结果缓冲区中,作为输入的终止。终止符可以是默认的终止符,也可以是定义的终止符。函数的语法结构是:
getline(<字符数组chs>,<读取字符的个数n>,<终止符>)
在函数遇到和结束定界符相等的字符时函数结束,同时函数抽出定界符,此种情况下该定界符既不被放回输入流,也不被放入要生成的字符串。所以由此可以理解输入结束后的第一个回车是定界符,被确认后抛弃,而第二个才是程序执行运行时正常需要的。
应用。
④在fsream头文件下的getline 函数,如果直接利用,如getline(iflie,str)//第一个参数为自己定义的ifstream的类成员,第二个是一个字符串变量,意思就是将iflie成员指向的文件里面的数据逐行读入str字符串变量,遇到回车键的时候结束一次读取,当遇到空白符的时候结束读取。此时getline函数就直接把ifile里面的数据看成了一个字符数组,然后将字符串变量直接看成了限制读取字符的个数,所以可以直接这么用
string str;
ifstream ifile (“data.txt”);
getline(ifile,str);
cout<<str;
源码
①读取方式: 逐行读取, 将行读入字符数组, 行之间用回车换行区分
(1)提前设好一个静态的字符数组
#include <iostream>
#include <fstream>
#include <sstream>
#include <string>
int main()
{
ifstream fin("data.txt");
const int LINE_LENGTH = 100;
char str[LINE_LENGTH];
int count = 0;
while (fin.getline(str, LINE_LENGTH)) // 逐行读取, 将行读入字符数组,遇到回车键结束一次读取,但是此时返回while的还不是0,当getline 读取到文件的最后一个数据读完了,然后读到空白符的时候,返回while 就是0了,所以中止while.第二个参数是指每行不超过这么多字符,
{
cout << "Read from file: " << str << endl;//输出字符数组的数据,最后换行
count++;
}
cout << count << endl;
return 0;
}
(2)提前设好一个动态的字符数组
//这个方法不推荐,因为动态数组很容易把堆和栈给破坏,因为delete的时候最后指针指向性不明,在VS会报错,在dev不会报错
#include <iostream>
#include <fstream>
#include <sstream>
using namespace std;
int main()
{
char* line;
int count;
cin>>count
line=new char [count];
ifstream ifile ("data.txt");
while (ifile.good())//当文件里面有数据时执行
{
ifile.getline(line,256);
puts(line);
}
return 0;
}
//详情请看此链接 https://zhidao.baidu.com/question/554906675.html
②读取方式:读取方式: 逐行读取, 将行读入字符串, 行之间用回车换行区分
(1)while循环条件为读取数据
#include <iostream>
#include <fstream>
#include <sstream>
#include <stdlib.h>
using namespace std;
void zhuhangduqu_string()
{
ifstream fin("data.txt");
string s;
while (getline(fin, s))//读取fin文件的数据,将其存入字符串,遇到回车时结束第一次读取,但是返回while的是\n,所以执行完while体内的语句后,就继续while判断,此时getline又要读取文件数据,但是会从上次读取停止的地方开始往下读,周而复始,一直到getline读完全部不文件内容,遇到空白符时,返回while为0时,到下一次while循环判断就发现getline get到了0了,就中止while 了。
{
cout << "Read from file: " << s << endl;//注意不能有Puts()因为这个为字符串,不是数组
}
}
(2)while循环条件为判断文件是否还有数据
#include <iostream>
#include <fstream>
#include <sstream>
#include <stdlib.h>
using namespace std;
int main()
{
int count;
cin>>count;
string line;//定义要给字符串变量
ifstream ifile ("data.txt");
while (ifile.good())//当读取文件不出错时,即里面还有数据时
{
getline(ifile,line);从文件中读取数据,存入到line字符数组中
cout<<line<<endl;
}
return 0;
}
③读取方式: 逐词读取,文本数据中词之间用空格区分,且如果换行了也可以读取到,然后把读到的词赋值给s,一直读到全部数据读完了就结束了。
#include <iostream>
#include <fstream>
#include <sstream>
#include <stdlib.h>
using namespace std;
void zhuziduqu()
{
ifstream fin("data.txt");
string s;
int count = 0;
while (fin>>s)
{
cout << "Read from file: " << s << endl;
count++;
}
cout << count << endl;
}
本文介绍了使用C++进行文件读取的多种方法,包括利用ifstream类及其成员函数good()和getline()进行逐行读取,以及如何将数据读入字符数组或字符串变量。同时还对比了静态与动态字符数组的应用场景。

1601

被折叠的 条评论
为什么被折叠?



