题目
有两个磁盘文件A和B,各存放一行字母,今要求把这两个文件中的信息合并(按字母顺序排列),输出到一个新文件C中去。
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main(){
void sort(char c[],int n);
FILE*fa,*fb,*fc;
int i;//循环变量
int m;//标记
char ch;
char a[50];
char b[50];
char c[100];
if((fa=fopen("C:\\Users\\17604\\Desktop\\a.txt","r"))==NULL){
printf("打开文件失败!!");
exit(0);
}
if((fb=fopen("C:\\Users\\17604\\Desktop\\b.txt","r"))==NULL){
printf("打开文件失败!!");
exit(0);
}
if((fc=fopen("C:\\Users\\17604\\Desktop\\c.txt","w"))==NULL){
printf("打开文件失败!!");
exit(0);
}
i=0;
while((ch=getc(fa))!=EOF){//读入A文件数据
a[i]=ch;
i++;
}
printf("A文件:\n");
puts(a);
i=0;
while((ch=getc(fb))!=EOF){//读入B文件数据
b[i]=ch;
i++;
}
printf("B文件:\n");
puts(b);
//合并信息
for(i=0;i<strlen(a);i++){
c[i]=a[i];
}
m=i;
for(i=0;i<strlen(b);i++){
c[m+i]=b[i];
}
c[m+i]='\0';
printf("合并后C文件:\n");
puts(c);
sort(c,(m+i));
printf("排序后C文件:\n");
puts(c);
for(i=0;i<strlen(c);i++){
putc(c[i],fc);
if(ferror(fc)){
printf("写入字符失败!!\n");
}
}
fclose(fa);
fclose(fb);
fclose(fc);
return 0;
}
void sort(char c[],int n){//排序 按字母顺序排序
char temp;
int i;
int j;
for(i=0;i<n-1;i++){//用选择法进行排序
for(j=i+1;j<n;j++){
if(c[j]<c[i]){
temp=c[i];
c[i]=c[j];
c[j]=temp;
}
}
}
}
效果图: