真心觉得难啊!唉,求大神,C语言编程

文件合并
有两个磁盘文本文件“A”和“B”,要求把这两个文件中的信息合并,并按字母顺序排列,输出到一个新文件“C”中。 解题思路分析:
(1) 创建文本文件“A”、“B”,输入一些文本信息并保存到文件中;
(2) 根据“A”、“B”的文件长度,动态分配一个内存区域buffer;
(3) 将文件“A”、“B”的内容读到buffer中;
(4) 对buffer中的字符排序;
(5) 将buffer中的字符输出到文件“C”中。
根据上述分析,可将部分功能封装到下面的函数:
(1) 函数CreateMyFile,输入文本信息并保存到指定文件中;
(2) 函数GetFileLen,计算指定文本文件的长度
(3) 函数ReadFileToBuf,将指定文本文件的内容读到指定的内存区域;
(4) 函数SortBuf,将指定的内存区域数据排序;
(5) 函数SaveBuf,将指定的内存区域数据保存到文本文件中。
具体实验步骤与要求如下: (1)设计各函数原型,并完成函数定义; (2)根据解题思路分析,编写并调试程序; (3)运行程序; (4)用type命令或notopad程序检查文件“A”、“B”、“C”的内容

#include <iostream>
#include <fstream>
#include <string>
using namespace std;
void createMyFile(char file[], char data[]); //输入文本信息并保存到指定文件中
int getFileLen(char file[]);
void readFileToBuf(char data[], char file1[], int fileNum1, char file2[], int fillNum2);
void sortBuf(char data[], int fileNum);
void saveBuf(char file[], char data[]);
void main()
{
char fileA[] = "qw.txt";
char fileB[] = "er.txt";
char fileC[] = "ty.txt";
int fileNum1 = 0;
int fileNum2 = 0;
char data[100] = {' ', 1000};
createMyFile(fileA, "fdsgfdsa");
createMyFile(fileB, "ghyku");
fileNum1 = getFileLen(fileA);
cout<<fileNum1<<endl;
fileNum2 = getFileLen(fileB);
cout<<fileNum2<<endl;
readFileToBuf(data, fileA, fileNum1, fileB, fileNum2);
cout<<data<<endl;
sortBuf(data, fileNum1 + fileNum2);
cout<<data<<endl;
saveBuf(fileC, data);

}
//----------------------
void createMyFile(char file[], char data[])
{
ofstream fout;
fout.open(file);
fout<<data;
}
int getFileLen(char file[])
{
int num = 0;
ifstream fin;
fin.open(file);
if(fin.is_open)
{
fin.seekg(0, ios_base::end);
num = fin.tellg();
}else
{
cout<<"打开文件错误"<<endl;
}
return num;
}
void readFileToBuf(char data[], char file1[], int fileNum1, char file2[], int fillNum2)
{
ifstream fin;
fin.open(file1);
for(int i=0; i<fileNum1; i++)
{
data[i] = fin.get();
fin.seekg(i+1);
}
fin.close();
fin.open(file2);
for(i=0; i<fillNum2; i++)
{
data[i+fileNum1] = fin.get();
fin.seekg(i+1);
}
fin.close();
}
void sortBuf(char data[], int fileNum)
{
char ctemp;
for(int i=0; i<fileNum; i++)
{
for(int j=i; j<fileNum; j++)
{
if(data[i] > data[j])
{
ctemp = data[i];
data[i] = data[j];
data[j] = ctemp;
}
}
}
}
void saveBuf(char file[], char data[])
{
ofstream fout;
fout.open(file);
fout<<data<<endl;
}

纯手写的代码,希望能给楼主起到作用。如果还有什么不懂的可以联系我。QQ:604828651

温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-04-08
题目不是很难,但信息量确实大!写起来很费时间,建议你一步一步去实现,这个问题都是循序渐进的。你先实现创建两个文件,然后利用fread fwrite fseek这三个函数来实现操作文件。然后,将文件内容读进内存,关于将文件读到内存中的处理还是得你自己来,题目真心复杂!晕~~~
第2个回答  2013-04-06
题目不难,就是题目量比较大追问

初学者苦逼啊。。。。。。

相似回答