以下主函数连同函数CreateMyfile()、printfmyfile()、GetFilelen()、ReadFileToBuf()、save()、sort()实现了两个文本文件的信息合并,并按字母

#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;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

1886i

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值