| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1963 人关注过本帖, 2 人收藏
标题:文本文件操作_单词的排序 问题 大神看看哪里错了
只看楼主 加入收藏
zx624841751
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2016-11-30
结帖率:0
收藏(2)
已结贴  问题点数:20 回复次数:2 
文本文件操作_单词的排序 问题 大神看看哪里错了
/* #1107 文本文件操作_单词的排序

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

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

hello

bye

yes

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

bye

hello

yes
*/
#include "stdio.h"
#include "string.h"
main()
{
    FILE *fp=NULL,*fp1=NULL;
    char w[10000][11]={'\0'},t[11]={'\0'};
    fp=fopen("case1.in","r");
    fp1=fopen("answer.txt","w");
    int i,j,n=0;
    for(i=0,j=0; (w[i][j]=fgetc(fp))!=EOF; j++)
    {
        if(w[i][j]=='\n')
        {   
            i++;
            n++;
            j=0;
            continue;
        }
    }
    n++;
    for(i=0,j=1; i<n-1,j<n; i++,j++)
    {
        if(strcmp(w[i],w[j])>0)
        {
            strcpy(t,w[i]);
            strcpy(w[i],w[j]);
            strcpy(w[j],t);
        }
    }
    i=0;
    j=0;
    while(fputc(=w[i][j],fp1)!=EOF)
    {
        if(w[i][j]=='\n')
        {
            i++;
            j=0;
            continue;
        }
        j++;
    }
    fclose(fp);
    fclose(fp1);
}

[此贴子已经被作者于2016-11-30 10:51编辑过]

搜索更多相关主题的帖子: 英文单词 文本文件 return 填空题 
2016-11-30 10:37
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
收藏
得分:10 
总算搞定了~问题较多,改动还是较大的,对比一下,你看看改了什么地方~

程序代码:
#include "stdio.h"
#include "string.h"
#include "stdlib.h"
int main()
{
    FILE *fp=NULL,*fp1=NULL;
    int i,j;
    int n=0;
    char w[10000][11];
    char t[11];

    memset(w,0,10000*11*sizeof(char));  
    memset(t,0,11*sizeof(char));

    fp=fopen("D:\\CC\\DD\\aa.txt","r");    //测试时把路径改了一下~
    fp1=fopen("D:\\CC\\DD\\bb.txt","w");

    for(i=0,j=0; (w[i][j]=fgetc(fp))!=EOF; j++)
    {

    
        if(w[i][j]=='\n')
        {   
            i++;
            n++;
            j=-1;  //由于下一次fp读取'\0'会干扰,j要前移一位缓冲,固j=-1
        }
    }

     for(i=0; i<n-1; i++)  //选择法排序改了一下
     {
         int k=i;
         for (j=i+1;j<n;j++)
             if (strcmp(w[k],w[j])>0)
                 k=j;
        if (k!=i)
        {
            strcpy(t,w[i]);
            strcpy(w[i],w[k]);
            strcpy(w[k],t);
        }
         
     }
    i=0;
    j=0;
    
    while(fputc(w[i][j],fp1)!=NULL)  //原题的while(fputc(w[i][j],fp1)!=EOF)不仅语法错误,而且应该fputc读取字符结束应该是返回0(NULL)不是返回EOF
    {
        if(w[i][j]=='\n')
        {
            i++;
            j=0;
            continue;
        }
        j++;
    }
    fclose(fp);
    fclose(fp1);
}

[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2016-11-30 18:09
吹水佬
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:451
帖 子:10607
专家分:43186
注 册:2014-5-20
收藏
得分:10 
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define N 10000
typedef struct _STR_
{
    char str[12];
} STR, *PSTR;

int cmp(const void *s1 , const void *s2)
{
    return strcmp((*(STR *)s1).str, (*(STR *)s2).str);
}

main()
{
    STR s[N];
    char buf[12];
    int i, n=0;
    FILE *fr, *fw;
    fr = fopen("case1.in", "r");
    fw = fopen("answer.txt", "w");
    while ((fgets(buf, 12, fr)) != NULL)
    {
        strcpy(s[n].str, buf);
        n++;
    }
    qsort(s, n, sizeof(s[0]), cmp);
    for (i=0; i<n; i++)
    {
        fputs(s[i].str, fw);
    }
    fclose(fr);
    fclose(fw);
}


[此贴子已经被作者于2016-12-1 05:41编辑过]

2016-11-30 22:20
快速回复:文本文件操作_单词的排序 问题 大神看看哪里错了
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.018737 second(s), 10 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved