#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#pragma warning(disable:4996)
void CreateMyfile(char* filename)
{
//打开文件
FILE* pf = fopen(filename, "w");
if (pf == NULL)
{
perror("fopen");
return;
}
//按字符输入以"\n"结束
char ch = '0';
while ((ch=getchar()) != '\n')
{
fputc(ch,pf);
}
//关闭文件
fclose(pf);
pf = NULL;
}
//文本文件的创建,按字符输入,以'\n'结束输入
void printmyfile(char* filename)
{
//打开文件
FILE* pf = fopen(filename, "r");
if (pf == NULL)
{
perror("fopen");
return;
}
//读文件
char ch = 0;
while ((ch = fgetc(pf)) != EOF)
{
printf("%c", ch);
}
//关闭文件
fclose(pf);
pf = NULL;
}
//文本文件的显示
void ReadFileToBuf(char* filename, char* buffer)
{
//打开文件
FILE* pf = fopen(filename, "r");
if (pf == NULL)
{
perror("fopen");
return;
}
//读入数据
char ch = '0';
while ((ch = fgetc(pf)) != EOF)
{
*buffer = ch;
buffer++;
}
//关闭文件
fclose(pf);
pf = NULL;
}//将文件中的字符读到内存中
int GetFilelen(char* filename)
{
int count = 0;
//打开文件
FILE* pf = fopen(filename, "r");
if (pf == NULL)
{
perror("fopen");
return;
}
//计算长度
while (fgetc(pf) != EOF)
{
count++;
}
//关闭文件
fclose(pf);
pf = NULL;
return count;
}
//计算文件的长度(字节数)
void save(char* buffer, int len, char* filename)
{
//打开文件
FILE* pf = fopen(filename, "w");
if (pf == NULL)
{
perror("fopen");
return;
}
//写入
for (int i = 0; i < len; i++)
{
fputc(buffer[i], pf);
}
//关文件
fclose(pf);
pf = NULL;
}//将指定内存区域数据保存到文本文件中
int cmp_by_ci(const void* p1, const void* p2)
{
return (*((char*)p1) - *((char*)p2));
}
void sort(char* buffer, int count)
{
qsort(buffer, count, sizeof(buffer[0]), cmp_by_ci);
}
//排序
int main(void)
{
char fileA[80]; //文件A的名字
char fileB[80];
char fileC[80];
int filelenA; //文件A长度
int filelenB;
char* buffer;//读取的文件信息在内存中的指针
int i = 0;//用于控制输出buffer中的数据
printf("please input name of fileA:\n");
scanf("%s", fileA);
getchar();
CreateMyfile(fileA);
printmyfile(fileA);
printf("\nplease input name of fileB:\n");
scanf("%s", fileB);
getchar();
CreateMyfile(fileB);
printmyfile(fileB);
filelenA = GetFilelen(fileA);
filelenB = GetFilelen(fileB);
printf("\n****文件%s的长度为:%d******\n****文件%s的长度为:%d*****\n", fileA, filelenA, fileB, filelenB);
buffer = (char*)malloc(sizeof(char)*(filelenA+filelenB+1));//申请内存用于存放文件fileA和fileB的字符
ReadFileToBuf(fileA, buffer);
//调用函数ReadFileToBuf()将文件fileA中的数据读出到buffer对应的内存中
printf("\n******* the data of buffer BEGIN*****\n ");
//自行添加代码验证buffer中的数据是否正确
FILE* pf = fopen(fileA, "r");
if (pf == NULL)
{
perror("fopen");
return;
}
//判断
fseek(pf, -1, SEEK_END);
if (fgetc(pf) == *(buffer + filelenA-1))
{
printf("读入正确!!!\n");
}
printf("\n******* the data of buffer END*****\n ");
printf("sorting the data of fileA and fileB……\n ");
//调用函数sort(),完成排序
sort(buffer, filelenA);
printf("please input name of fileC:\n");
scanf("%s", fileC);
getchar();
printf("\n*****writing the data to fileC……\n ");
//调用函数save,实现内存数据存入文件fileC中
save(buffer, filelenA, fileC);
printf("\n****文件%s的长度为:%d******\n", fileC, GetFilelen(fileC));
printmyfile(fileC);
return 0;
}
01-07
5376
08-27
292
01-12
3589