首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

文件合并并排序解决思路

2012-03-25 
文件合并并排序有两个磁盘文件A和B,各存放一行字母,要求把这两个文件中的信息合并(按字母顺序排列),输出到

文件合并并排序
有两个磁盘文件A和B,各存放一行字母,要求把这两个文件中的信息合并(按字母顺序排列),输出到一个新文件C中。

[解决办法]
#include <stdio.h>
#include <stdlib.h>

int main()
{
FILE *fpA=fopen( "A.txt ", "r "); //A文件
FILE *fpB=fopen( "B.txt ", "r "); //B文件,两个作为输入文件,内容有序
FILE *fpout=fopen( "data.txt ", "w "); //输出文件,三个文件都在当前目录下
char a, b;
a=fgetc(fpA);
b=fgetc(fpB);

while(a!=EOF && b!=EOF) //循环读取并根据比较结果写文件,之后读取新的数据
{
if(a <b) //假设是升序,如果是降序使用 > 即可
{
fputc(a, fpout);
a=fgetc(fpA);
}
else
{
fputc(b, fpout);
b=fgetc(fpB);
}
}
while(a!=EOF) //继续读取没有操作的数据
{
fputc(a, fpout);
a=fgetc(fpA);
}
while(b!=EOF)
{
fputc(b, fpout);
b=fgetc(fpB);
}
fclose(fpA);
fclose(fpB);
fclose(fpout);

system( "PAUSE ");
return 0;
}

测试文件:【假设原文件为 升序数据】
A.txt: adfgs
B.txt: eopt
data.txt: adefgopst //合并OK
[解决办法]
#include "stdio.h "
main()
{ FILE *fp;
int i,j,n,ni;
char c[160],t,ch;
if((fp=fopen( "A ", "r "))==NULL)
{printf( "file A cannot be opened\n ");
exit(0);}
printf( "\n A contents are :\n ");
for(i=0;(ch=fgetc(fp))!=EOF;i++)
{c[i]=ch;
putchar(c[i]);
}
fclose(fp);
ni=i;
if((fp=fopen( "B ", "r "))==NULL)
{printf( "file B cannot be opened\n ");
exit(0);}
printf( "\n B contents are :\n ");
for(i=0;(ch=fgetc(fp))!=EOF;i++)
{c[i]=ch;
putchar(c[i]);
}
fclose(fp);
n=i;
for(i=0;i <n;i++)
for(j=i+1;j <n;j++)
if(c[i]> c[j])
{t=c[i];c[i]=c[j];c[j]=t;}
printf( "\n C file is:\n ");
fp=fopen( "C ", "w ");
for(i=0;i <n;i++)
{ putc(c[i],fp);
putchar(c[i]);
}
fclose(fp);
}
[解决办法]
三分钟不到,就多了两个回帖了!
虫子。。。。

热点排行