文件流和输入输出流

本文档展示了三个C++程序实例,涉及文件操作的基本技巧。第一个程序实现了字符ASCII值加5的简单加密并写入文件,第二个程序将一个文件的内容追加到另一个文件的末尾,第三个程序读取整数数组并排序后写入新文件。每个程序都强调了文件读写的关键细节,如确保文件存在、正确处理数据格式和排序算法的应用。
摘要由CSDN通过智能技术生成

对于文件流来说,写入可以没有这个文件,系统帮你自动创建,但读取必须要有。

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个整数并对这些整数进行升序排序”这个题干就太蠢了,我一开始就有这十个数据还要特意去提取干什么。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值