生产企业网站如何做seo,网站维护方案怎么做,有色建设网站,龙岩网站推广#x1f30f;个人博客#xff1a;尹蓝锐的博客 1、题目要求
有两个磁盘文件A和B#xff0c;各存放一行字母#xff0c;今要求把这两个文件的信息合并#xff08;按字母顺序排列#xff09;#xff0c;输出到一个新文件C中去
2、准备工作 问题1#xff1a;为什么不需要… 个人博客尹蓝锐的博客 1、题目要求
有两个磁盘文件A和B各存放一行字母今要求把这两个文件的信息合并按字母顺序排列输出到一个新文件C中去
2、准备工作 问题1为什么不需要手动创建C.txt文件 答根据题意我们可知我们需要调用fopen函数以只读方式打开A.txt和B.txt文件只读方式打开文件要求文件必须提前存在而C.txt文件需要以写入方式打开如果文件不存在会自动创建一个C.txt文件。
参考fopen函数使用方法
3、具体程序
#define _CRT_SECURE_NO_WARNINGS 1
#includestdio.h
#includestring.h
void openFile(FILE **fpa,FILE **fpb, FILE **fpc) //打开文件函数
{*fpa fopen(A.txt, r);if (*fpa NULL){printf(打开文件A失败\n);exit(1);}*fpb fopen(B.txt, r); if (*fpb NULL){printf(打开文件B失败\n);exit(1);}*fpc fopen(C.txt, w);if (*fpc NULL){printf(打开文件c失败\n);exit(1);}
}
void closeFile(FILE* fpa, FILE* fpb, FILE* fpc)//关闭文件函数
{fclose(fpa);fclose(fpb);fclose(fpc);
}
void GetBufferChar(FILE* fpa, FILE* fpb, char* buffer)//连接字符串函数
{fgets(buffer, 1024, fpa);//从A文件读入数据int len strlen(buffer);fgets(buffer len, 1024, fpb);//从B文件读入数据
}
void SortBufferChar(char* buffer)
{int n strlen(buffer);for (int i 0; i n - 1; i){for (int j 0; j n - i - 1; j){if (buffer[j] buffer[j 1]){char temp buffer[j];buffer[j] buffer[j 1];buffer[j 1] temp;}}}
}
void SaveFile(FILE* fpc, char* buffer)
{fputs(buffer, fpc);
}
int main()
{FILE* fpa, *fpb, *fpc;char buffer[1024] { 0 };openFile(fpa, fpb, fpc);//打开全部文件,A,B以只读方式,C以写入方式GetBufferChar(fpa, fpb, buffer);//连接字符串printf(数据相连的结果是\n%s\n,buffer);SortBufferChar(buffer);//字符串排序printf(排序后字符串结果是\n%s\n,buffer);SaveFile(fpc, buffer);closeFile(fpa, fpb, fpc);return 0;
}
4、代码深度解析
4.1 main函数
创建三个FILE类型指针和字符型数组buffer并通过5个函数实现功能
4.2 openFile函数
openFile(FILE **fpa,FILE **fpb, FILE **fpc)
函数参数为二级指针即FILE类型地址的地址指针的指针
问题2为什么要拿二级指针而不是一级指针
答在主函数中我么创建了三个FILE类型的指针变量但是并没有给定指向那么最开始的三个FILE类型的指针变量需要我们在openFile函数中给定指向。具体是怎么做的呢首先我们知道实参向形参的数据传递是“值传递”单向传递如果将一级指针传给openFile函数然后在openFile函数中将一级指针指向fopen函数即以下代码那么根据值传递的特点main函数中的File类型指针实际上根本没有指向fopen函数这显然是错误的。那么如何让main函数中的FILE类型指针指向fopen函数呢这就需要二级指针发挥作用了我们将二级指针作为openFile函数参数通过解引用的方式将二级指针的值解引用二级指针得到二级指针的值即一级指针指向fopen函数这相当于在main函数中将三个FILE类型指针初始化了这显然是可行的因此要拿二级指针而不是一级指针。
参考C语言实参和形参数据传递的特点及使用技巧
void openFile(FILE *fpa,FILE *fpb, FILE *fpc) //打开文件函数错误写法
{fpa fopen(A.txt, r);if (fpa NULL){printf(打开文件A失败\n);exit(1);}fpb fopen(B.txt, r); if (fpb NULL){printf(打开文件B失败\n);exit(1);}fpc fopen(C.txt, w);if (fpc NULL){printf(打开文件c失败\n);exit(1);}
}
int main()
{FILE* fpa, *fpb, *fpc;openFile(fpa, fpb, fpc);//错误写法return 0;
}
4.3 closefile函数
closeFile(FILE* fpa, FILE* fpb, FILE* fpc)
此函数在文件操作完成后将各文件关闭。
参考fclose函数使用方法 4.4 GetBufferChar函数
GetBufferChar(FILE* fpa, FILE* fpb, char* buffer)
该函数为字符串连接函数用于将A.txt和B.txt文件中的字符串连接并保存到字符数组中在main函数中直接将字符数组buffer的数组名作为参数则数组名为指向字符数组首元素的指针。通过fgets函数从文件流fpa中取出最多1024-1个字符赋值给buffer字符数组进行顺序保存fgets函数功能保存完文件A.txt中的字符后计算buffer数组中的字符长度以供B.txt文件中的字符紧跟在已经存入buffer字符数组中A文件字符的后面实现两文件字符在buffer字符数组中实现连接。
参考fgets函数的使用方法
问题3什么是文件流
答文件流是一个抽象的概念我们可以这样理解FILE类型的指针通过fopen函数指向一个文件后FILE类型的指针变量就能够称为文件流了我们可以通过文件流实现各种文件操作。 4.5 SortBufferChar函数
SortBufferChar(char* buffer)
该函数实现将buffer数组中已经连接好的字符重新排序采用的是冒泡排序
参考字符串排序方法 4.6 SaveFile函数
SaveFile(FILE* fpc, char* buffer)
此函数将buffer中排好序的字符最终写入到文件C.txt中
参考fputs函数使用方法 如果我的博客能给您带来启发请不吝点赞、评论和收藏也欢迎您关注我的博客。