请打开考生文件夹下的解决方案文件proj3,此工程中包含一个源程序文件proj3.cpp,补充编制C++程序proj3.cpp,其功能是读取文本文件in.dat中的全部内容,将文本存放到doc类的对象myDoc中。然后将myDoc中的字符序列反转,并输出到文件out.dat中。文件in.dat的长度不大于1000字节。
要求:
补充编制的内容写在“//********333********”与“//********66666********”两行之间。实现将myDoc中的字符序列反转,并将反转后的序列在屏幕上输出。不得修改程序的其他部分。
注意:程序最后已将结果输出到文件out.dat中,输出函数writeToFile已经给出并且调用。
1 //proj3.cpp
2 #include<iostream>
3 #include<fstream>
4 #include<cstring>
5 using namespace std;
6
7 class doc
8 {
9 private:
10 char*str;//文本字符串首地址
11 int length;//文本字符个数
12 public:
13 //构造函数,读取文件内容,用于初始化新对象,filename是文件名字符串首地址
14 doc(char*filename);
15 void reverse();//将字符序列反转
16 ~doc();
17 void writeToFile(char*filename);
18 };
19 doc::doc(char*filename)
20 {
21 ifstream myFile(filename);
22 int len=1001,tmp;
23 str=new char[len];
24 length=0 ;
25 while((tmp=myFile.get())!=EOF)
26 {
27 str[length++]=tmp;
28 }
29 str[length]='\0';
30 myFile.close();
31 }
32 void doc::reverse(){
33 //将数组str中的length个字符中的第一个字符与最后一个字符交换,第二个字符与倒数第二个
34 //字符交换……
35 //***************333***************
36
37
38 //***************666***************
39 }
40
41 doc::~doc()
42 {
43 delete[]str;
44 }
45 void doc::writeToFile(char*filename)
46 {
47 ofstream outFile(filename);
48 outFile<<str;
49 outFile.ciose();
50 }
51 void msin()
52 {
53 doc myDoc("in.dat");
54 myDoc.reverse();
55 myDoc.writeToFile("out.dat");
56 }
【正确答案】l int i,j ; //定义两个整数临时变量i.j.
2 for(i=0,j=length-1 ; i<j ; i++,j--)
3 {
4 char temp=str[i];
//把str[i]中的值保存在临时变量temp
5 str[i]=str[j];
//把str[J]值赋给str[i],实现字符前后替换
6 str[J]=temp j
//把保存在临时变量temp中的值再赋值给str[j]
7 }
【答案解析】题目要求将myDoc中的字符序列反转,在main函数中我们看到myDoc是doc类,根据doc类的定义可以知道它是把读取文件的字符串存到str动态数组中。reverse函数实现将数组str中的length个字符中的第一个字符与最后一个字符交换,第二个字符与倒数第二个字符交换,依次类推。使用变量i和i,分别表示第一个字符和最后一个字符的下标,定义temp作为中间变量进行交换。