有两个磁盘文件A和B,各存放一行字母,要求把这两个文件中的信息合并(按字母顺序排列),输出到一个新文件C中。
/*
有两个磁盘文件A和B,各存放一行字母,要求把这两个文件中的信息合并(按字母顺序排列),输出到一个新文件C中。
*/
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
void judge(FILE *fp, char *filename);
void sort(char *array);
int main() {
char array[255] = {0}; //定义一个数组用于存放读出来的字母
FILE *fp; //存放文件指针
fp = fopen("A.txt", "r");
judge(fp, "A.txt");
fread(array, sizeof(char), sizeof(array), fp); //将A文件的字母读取存入array
fclose(fp);
fp = fopen("B.txt", "r");
judge(fp, "B.txt");
fread(array + strlen(array) - 1, sizeof(char), sizeof(array), fp); //将B文件的字母继续放在array中A文件后面
fclose(fp);
sort(array);
fp = fopen("C.txt", "w+");
fwrite(array, sizeof(char), sizeof(array), fp); //将array中数据写入文件C中
printf("C.txt写入成功:%s\n", array);
fclose(fp);
return 0;
}
//判断文件打开是否正常
void judge(FILE *fp, char *filename) {
if (fp == NULL) {
printf("%s文件读取失败");
exit(0);
}
}
//使用冒泡法对字母排序
void sort(char *array) {
int i, j, len = strlen(array);
for (i = 0; i < len - 1; i++) {
for (j = 0; j < len - i - 1; j++) {
if (array[j] > array[j + 1]) {
array[j] = array[j] + array[j + 1];
array[j + 1] = array[j] - array[j + 1];
array[j] = array[j] - array[j + 1];
}
}
}
}