用C语言完成这个程序,有两个磁盘文件A和B,个存放一行字母,要求将其按照字母顺序排序,输出到一个新的文件中。
时间: 2024-05-08 15:16:56 浏览: 71
```
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_LINE_LENGTH 100
int main() {
FILE *fileA, *fileB, *fileC;
char lineA[MAX_LINE_LENGTH], lineB[MAX_LINE_LENGTH], lineC[MAX_LINE_LENGTH];
int cmp;
// 打开文件A
fileA = fopen("A.txt", "r");
if (fileA == NULL) {
printf("无法打开文件A\n");
return 1;
}
// 打开文件B
fileB = fopen("B.txt", "r");
if (fileB == NULL) {
printf("无法打开文件B\n");
fclose(fileA);
return 1;
}
// 创建新文件C
fileC = fopen("C.txt", "w");
if (fileC == NULL) {
printf("无法创建文件C\n");
fclose(fileA);
fclose(fileB);
return 1;
}
// 读取文件A和文件B的第一行
if (fgets(lineA, MAX_LINE_LENGTH, fileA) == NULL) {
printf("文件A为空\n");
fclose(fileA);
fclose(fileB);
fclose(fileC);
return 1;
}
if (fgets(lineB, MAX_LINE_LENGTH, fileB) == NULL) {
printf("文件B为空\n");
fclose(fileA);
fclose(fileB);
fclose(fileC);
return 1;
}
// 合并文件A和文件B的内容并按字母顺序排序
while (1) {
// 比较两个字符串
cmp = strcmp(lineA, lineB);
// 将较小的字符串写入文件C
if (cmp <= 0) {
strcpy(lineC, lineA);
// 读取下一行
if (fgets(lineA, MAX_LINE_LENGTH, fileA) == NULL) {
// 文件A已读取完毕,将文件B的剩余内容写入文件C
while (fgets(lineB, MAX_LINE_LENGTH, fileB) != NULL) {
fprintf(fileC, "%s", lineB);
}
break;
}
} else {
strcpy(lineC, lineB);
// 读取下一行
if (fgets(lineB, MAX_LINE_LENGTH, fileB) == NULL) {
// 文件B已读取完毕,将文件A的剩余内容写入文件C
while (fgets(lineA, MAX_LINE_LENGTH, fileA) != NULL) {
fprintf(fileC, "%s", lineA);
}
break;
}
}
// 将合并后的行写入文件C
fprintf(fileC, "%s", lineC);
}
// 关闭所有文件
fclose(fileA);
fclose(fileB);
fclose(fileC);
printf("排序完成,结果已写入文件C\n");
return 0;
}
```
阅读全文