对于文件流来说,写入可以没有这个文件,系统帮你自动创建,但读取必须要有。
1、编程实现一个简单的文件加密:从键盘读入一行字符,把每个字符的ASCII值加5后存放在文件“data.txt”中。
#include <iostream>
#include <fstream>
using namespace std;
int main()
{
char zifu[30]={0};
cin.getline(zifu,30);
for(int i=0;zifu[i]!='\0';i++)
{
zifu[i]+=5;
}
fstream file("data.txt");
for(int i=0;zifu[i]!='\0';i++)
{
file<<zifu[i];
}
int len=sizeof(zifu)/sizeof(zifu[0]);
for(int i=0;i<len;i++)
{
cout<<zifu[i];
}
file.close();
}
ps:记得在同子目录下创建data.txt
2、编写程序将一个文本文件“in.txt”的内容追加到另一个文本文件"out.txt"的末尾。
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
int main()
{
string str;
fstream ifile("in.txt");
fstream ofile("out.txt",ios::app);
while(ifile>>str)
{
ofile<<str;
}
ifile.close();
ofile.close();
}
也别纠结txt里面到底是什么,全都当做字符串来提取。
3、从键盘接受10个整数,存入“d:\source.txt”中,然后再从该文件中读取这10个整数,并对这些整数进行升序排序,最后将排序结果写入另一文本文件"d:\target.txt"
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
void change(int name[])
{
int i,j;
int temp;
for(i=0;i<9;i++)
{
for(j=0;j<9-i;j++)
{
if(name[j]>name[j+1])
{
temp=name[j];
name[j]=name[j+1];
name[j+1]=temp;
}
}
}
}
int main()
{
int num[10]={0};
int num0[10]={0};
int a;
fstream ofile("D:\\source.txt");
for(int i=0;i<10;i++)
{
cin>>num[i];
ofile<<num[i]<<" ";//这个每次输入的空格是必须的。
}
ofile.close();
fstream ifile("D:\\source.txt");
for(int i=0;i<10;i++)
{ifile>>a;
num0[i]=a;}//这个读取以后再升序排序的操作是在是太蠢了,还要装装样子
change(num0);
fstream outfile("D:\\target.txt");
for(int i=0;i<10;i++) outfile<<num0[i]<<" ";
}
为什么说ofile的空格是必须的,因为你在通过数组一个一个给ofile读取数据的时候,如果没有空格。你输入 1 2 3 4 5 6 7 8 9,实际在文本中保存的形式是123456789,这对于之后我们int a,每次只读取一个整形数据来说是有误解的,会把a=123456789一次性赋到num0[i]中。
当然,归根结底是“从文件中读取这10个整数并对这些整数进行升序排序”这个题干就太蠢了,我一开始就有这十个数据还要特意去提取干什么。