#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: