用 C语言编写一个函数,功能是建立两个文本文件“A”和“B”,各存放一行字母,要求把这两个文件中的信息 合并(按字母顺序排列),输出到一个新文本文件“C”中去
时间: 2025-01-01 07:38:49 浏览: 19
在C语言中,你可以创建一个函数来完成这个任务。这里是一个简单的示例,我们首先读取两个文件的内容,然后将内容合并并排序,最后将结果写入一个新的文件。注意,此示例假设输入文件内容只包含单个字母。
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h> // 需要这个头文件来处理字符
#define MAX_LINES 2 // 假设每个文件最多只有一行
#define MAX_LINE_LEN 100 // 文件内容最大长度
// 对字符串进行排序的辅助函数
char* cmp(const void* a, const void* b) {
return (*(char**)a) > (*(char**)b) ? a : b;
}
void mergeAndSortFiles(char* fileNameA, char* fileNameB, char* outFile) {
FILE* fileA = fopen(fileNameA, "r");
FILE* fileB = fopen(fileNameB, "r");
FILE* outputFile = fopen(outFile, "w");
if (!fileA || !fileB || !outputFile) {
perror("Error opening files");
exit(EXIT_FAILURE);
}
// 读取文件内容
char lineA[MAX_LINES][MAX_LINE_LEN];
char lineB[MAX_LINES][MAX_LINE_LEN];
int i, j;
for (i = 0; fgets(lineA[i], MAX_LINE_LEN, fileA) != NULL && i < MAX_LINES; i++) {
lineA[i][strlen(lineA[i]) - 1] = '\0'; // remove newline character
}
for (j = 0; fgets(lineB[j], MAX_LINE_LEN, fileB) != NULL && j < MAX_LINES; j++) {
lineB[j][strlen(lineB[j]) - 1] = '\0';
}
// 合并并排序字符串
char** lines = malloc((MAX_LINES + 1) * sizeof(char*));
for (i = 0; i < MAX_LINES; i++) {
lines[i] = lineA[i];
}
lines[MAX_LINES] = lineB[j]; // 将B文件的最后一个元素插入到末尾
qsort(lines, MAX_LINES + 1, sizeof(char*), cmp); // 排序
// 写入排序后的结果
for (i = 0; lines[i]; i++) {
fprintf(outputFile, "%s\n", lines[i]);
}
fclose(fileA);
fclose(fileB);
fclose(outputFile);
free(lines);
}
int main() {
char fileNameA[] = "A.txt";
char fileNameB[] = "B.txt";
char outFile[] = "C.txt";
mergeAndSortFiles(fileNameA, fileNameB, outFile);
return 0;
}
```
这段代码首先打开两个输入文件,读取内容,然后将它们合并并存储在一个动态分配的数组中。接着使用快速排序算法对字符数组进行排序,最后将排序后的字符逐个写入到新的输出文件中。
阅读全文