文本文件操作 单词排序

在当前目录有文件“case1.in”,文件里存放有多个(总个数不超过10000个)英文单词(每个英文单词不会超过10个字文字符), 每行一个,单词未排序。现要求,将文件中的所有单词按字典顺序排序,然后将排序好的单词写入新建的文件answer.txt中(注:文件存放于当前目录)。 请完成程序,实现该功能,(注意,填空题,请不要使用return 0结束,否则会影响评判而判错)

(如case1.in文件中原内容如下)
hello
bye
yes

(程序执行后,在文件answer.txt中内容如下)
bye
hello
yes

整体思路:将文件 “case1.in" 中的单词一个一个读出来,用插入排序存入数组中,再循环写入 “answer.txt” 中。

#include "stdio.h"
#include "string.h"

main()
{
    char origin[10000][11], temp[11];
    FILE *fp, *fp2;

    fp=fopen("“case1.in", "r");
    if(fp==NULL)return 1;		//文件打开方式是"r",如果文件打开失败程序运行完
    fgets(origin[0], 11, fp);	//控制台上会显示Process return 1,
    int n=1, i, j;				//可以以此来判断文件是否正常打开
    while((fgets(origin[n], 11, fp))!=NULL)//每次读取一个单词,且这个单词存在数组的最后一行
    {
        i=0;
        if(strcmp(origin[n], origin[i])<0)//如果这个单词排在数组中第一个单词的前面
        {
            for(j=n;j>=0;j--)
            {
                strcpy(origin[j+1],origin[j]);//把现有的所有单词都往后移一行
            }
            strcpy(origin[0],origin[n+1]);//把读到的单词放到数组第一个
        }
        if(strcmp(origin[n], origin[n-1])>0)//如果读到的单词排在最后,不用管,n++继续读取下一个单词
        {
            n++;continue;//
        }
        if(strcmp(origin[n], origin[i])>0)//读到的单词要放在中间
        {
            while(strcmp(origin[n], origin[i])>0)
            {
                i++;//找到要插入的位置
            }
            for(j=n;j>=i;j--)//把要插入的位置之后的所有单词都往后移一行
            {
                strcpy(origin[j+1],origin[j]);
            }
            strcpy(origin[i],origin[n+1]);//再把读到的单词放到相应位置
        }
        n++;//读取下一个单词
    }
    fp2=fopen("answer.txt", "w");
	for(i=0;i<n;i++)//因为第n个是读取失败时的值,所以不能等于n
    {
        fputs(origin[i], fp2);//把单词循环写入到"answer.txt"中
    }
    fclose(fp);
    fclose(fp2);
}
  • 5
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值