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

C程序设计 (第四版) 谭浩强 习题10.4

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

IDE工具:VS2010
Note: 使用不同的IDE工具可能有部分差异。
代码块
方法:使用指针,函数的模块化设计,动态分配内存
说明:文件A.txt,B.txt,C.txt已经存在于该项目目录下。
c 复制代码
#include <stdio.h>
#include <stdlib.h>

//初始化变量
void initialVar(char **name1, char **name2, char **name3){
	*name1 = (char*)malloc(80 * sizeof(char));
	*name2 = (char*)malloc(80 * sizeof(char));
	*name3 = (char*)malloc(80 * sizeof(char));
}

//输入文件名称
void inputFileName(FILE **file, char *name, int num){
	printf("Enter File%d Name: ", num);
	scanf("%s", name);

	char *sign = '\0';
	if(num == 1 || num == 2){
		sign = "r";
	}
	if(num == 3){
		sign = "w+";
	}

	*file = fopen(name, sign);
	if(*file == NULL){
		perror("Cannot open this file");
		system("pause");
		exit(0);
	}
	putchar(10);
}

//输出文件内容
void outputFile(FILE **file, int num){
	printf("File%d Content: ", num);
	while(!feof(*file)){
		putchar(fgetc(*file));
	}
	putchar(10);
}

//对文件内容进行排序
void sortFile(FILE **file, int count){
	char *arr = (char*)malloc(count * sizeof(char));
	for(int i = 0; i < count; i++){
		arr[i] = fgetc(*file);
	}
	rewind(*file);
	char temp;
	for(int i = 0; i < count; i++){
		for(int j = i + 1; j < count; j++){
			if(arr[i] > arr[j]){
				temp = arr[i];
				arr[i] = arr[j];
				arr[j] = temp;
			}
		}
	}
	for(int i = 0; i < count; i++){
		fputc(arr[i], *file);
	}
	rewind(*file);
}

//合并两个文件内容到第三个文件
void mergeFile(FILE **file1, FILE **file2, FILE **file3){
	rewind(*file1);
	rewind(*file2);

	int count = 0;
	while(!feof(*file1)){
		fputc(fgetc(*file1), *file3);
		count++;
	}
	fclose(*file1);

	while(!feof(*file2)){
		fputc(fgetc(*file2), *file3);
		count++;
	}
	rewind(*file3);
	sortFile(file3, count);
	outputFile(file3, 3);

	fclose(*file2);
	fclose(*file3);
}

//释放变量内存
void freeVar(char **name1, char **name2, char **name3){
	free(*name1);
	free(*name2);
	free(*name3);
}

int main(){
	FILE *file1 = NULL;
	FILE *file2 = NULL;
	FILE *file3 = NULL;
	char *name1 = NULL;
	char *name2 = NULL;
	char *name3 = NULL;

	initialVar(&name1, &name2, &name3);
	inputFileName(&file1, name1, 1);
	outputFile(&file1, 1);
	inputFileName(&file2, name2, 2);
	outputFile(&file2, 2);
	inputFileName(&file3, name3, 3);
	mergeFile(&file1, &file2, &file3);
	freeVar(&name1, &name2, &name3);

	system("pause");
	return 0;
}
运行结果如下:
相关推荐
小郝 小郝8 分钟前
【C语言】strstr查找字符串函数
c语言·开发语言
惊鸿.Jh16 分钟前
【滑动窗口】3254. 长度为 K 的子数组的能量值 I
数据结构·算法·leetcode
明灯L16 分钟前
《函数基础与内存机制深度剖析:从 return 语句到各类经典编程题详解》
经验分享·python·算法·链表·经典例题
碳基学AI22 分钟前
哈尔滨工业大学DeepSeek公开课:探索大模型原理、技术与应用从GPT到DeepSeek|附视频与讲义免费下载方法
大数据·人工智能·python·gpt·算法·语言模型·集成学习
补三补四25 分钟前
机器学习-聚类分析算法
人工智能·深度学习·算法·机器学习
独好紫罗兰36 分钟前
洛谷题单3-P5718 【深基4.例2】找最小值-python-流程图重构
开发语言·python·算法
正脉科工 CAE仿真1 小时前
基于ANSYS 概率设计和APDL编程的结构可靠性设计分析
人工智能·python·算法
Dovis(誓平步青云)1 小时前
【数据结构】排序算法(中篇)·处理大数据的精妙
c语言·数据结构·算法·排序算法·学习方法
2401_872945091 小时前
【补题】Xi‘an Invitational 2023 E. Merge the Rectangles
算法
暮雨哀尘2 小时前
微信小程序开发:开发实践
开发语言·算法·微信小程序·小程序·notepad++·性能·技术选型