三行,第一行abc...z,第二行ABC...Z,第三行123...0,用z代a,y代b...大写同理,2代1,三代2,0代9,以上文件在txt中,读出修改后写回。

本文详细介绍了使用C++进行文件读写操作的方法,包括如何使用ifstream和ofstream处理文本文件,以及如何通过getline函数读取文件内容。同时,文章深入探讨了字符串数组buffer在读取过程中的应用,以及如何处理和修改字符。通过具体实例,读者可以学习到如何避免常见的错误,如内存越界和文件内容丢失。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#include<iostream>
#include<fstream>
#include<string>
using namespace std;
int main()
{
	ifstream in("F:\\C++ project\\replace\\in.txt");
	
	string buffer[4];
	if (!in.is_open()) cout << "文件打开失败!" << endl;
	int j = 0;
	while (getline(in, buffer[j]))
	{
		j++;
	}
	ofstream out("F:\\C++ project\\replace\\in.txt");
	for (int i = 0; i <= 2; i++)
	{
		for (int k = 0; buffer[i][k] && (buffer[i][k] >= '0'&&buffer[i][k] <= '9' || buffer[i][k] >= 'a'&&buffer[i][k] <= 'z' || buffer[i][k] >= 'A'&&buffer[i][k] <= 'Z'); k++)
		{
			if (buffer[i][k] >= '0'&&buffer[i][k] <= '9')
			{
				if (buffer[i][k] == '9')
					out << "0";
				else
				{
					buffer[i][k] = buffer[i][k] + 1;
						out << buffer[i][k];
				}
				
			}
			else if (buffer[i][k] >= 'a'&&buffer[i][k] <= 'z')
			{
				buffer[i][k] = 'z' - buffer[i][k]+'a';
				out <<  (char)buffer[i][k];
			}
			else if (buffer[i][k] >= 'A'&&buffer[i][k] <= 'Z')
			{
				buffer[i][k] = 'Z' - buffer[i][k] + 'A';
				out << buffer[i][k];
			}
			else out << buffer[i][k];
		}
		out << endl;
	}
}

注意点:
注意1:要注意设置用来接受的buffer必须是数组,在使用getline()函数时每次getline()读入的都是一行的数据,并且将指针转到下一行开头,直到内容为空,但是内容为空时getline(stream in,string buffer)里的buffer必须存在,因为虽然内容为空,但是该函数依旧执行,只是返回值不同,所以buffer必须要有,虽然执行结果也为空,这就是为什么文本中只有三行但是要定义四个元素的buffer数组buffer[4]。
注意2:用法,
1.引用<iostream>,<string>,<fstream>,
2.此外先打开文件,用文件流ifstream in("c\\....."),此时要注意一个是双斜杠,另一个是要加双引号。
3.判断文件是否打开成功,用in.is_open()来判断。
4.定义一个buffer数组,数组的一个元素用来存储文件的一行。string buffer[4];
4.文件打开成功后,将其按行存入buffer数组中,

int i=0;
for(;getline(in,buffer[i]);i++);

5.此时输出流ofstream out("C:\\...."),
6.编写循环,将每个buffer中的每个字符一一取出,处理,’ '单引号中的字符可以互相加减,其结果是ASCII,如果加减完毕后直接输出文件内容是空白的(为什么?),所以要在输出前强制类型转换(char)。
7.输出到out流里用out<<。
错误点:
错误1:注意ofstream在打开文件(未添加参数时是这样)后将会清空文件,因此如果在输出流打开文件后再用getline向buffer读入文件则会发现buffer里是空的。
改正1: 在ofstream打开文件前,即

ofstream out("F:\\C++ project\\replace\\in.txt");

这条代码前使用getline(in,buffer)将in文件读出到buffer中。
错误2:一定要注意getline()函数只能读取一行数据,在碰到换行符后就会返回值,因此要用while(getline(in,buffer))来读取,此外发现while语句循环次数在三行的情况下是三次,但是是在第四次getline()函数返回错误时结束,也就是说成功了三次,运行了四次,因此要在第四次时保证getline()函数里的buffer能够正常使用,因此在数据只有三行的情况下要建立四个buffer,即string buffer[4];`一开始就是因为在这里错了导致内存老是读到string数组之外导致报错。
改正2:string buffer[4];

错误3:一开始忘了buffer[]是数组了,在处理字符时直接使用了一维数组。
改正3:使用二维数组。

错误4:
改正4:

错误5:
改正5:

错误6:
改正6:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值