早教吧 育儿知识 作业答案 考试题库 百科 知识分享

c语言:文件操作与字符处理1109文件操作与字符处理1.题目及题目分析1.1问题描述在当前目录中存在文件名为"case1.in"(其中case后为数字1,不是字母l,写错提交后会判错)的文本文

题目详情
c语言:文件操作与字符处理
1109 文件操作与字符处理
1. 题目及题目分析
1.1 问题描述
在当前目录中存在文件名为"case1.in"(其中case后为数字1,不是字母l,写错提交后会判错)的文本文件,
其内容为一篇英文文章(以EOF作为结束标志)。现要求读取该文本文件内容,统计文章中每个单词出现的次数,
并输出出现次数最多的前5个单词及其出现次数(按出现次数由多到少的顺序输出,次数相同时按字典顺序输出,
不足5个单词时,按序输出全部单词)。程序中注意如下细节:
(1) 空格、标点符号与回车符起到分隔单词的作用。
(2)文章一行的末尾可能有连字符,出现连字符时,该行最末的字符串与下行最先出现的字符串构一个单词;
(3) 名词缩写算一个单词;
(4) 数字不算单词;
(5) 单词不区分大小写;
(6) 输出时单词全使用小写;
输入格式
文件case1.in中一篇英文文章,包含多段文字,单词数不超过10000,每个单词不超过20个字符
输出格式
按题意输出答案
输入样例
(如case1.in内容如下)
I am a student. My school is SCAU. It is a beau-
tiful university. I like it.
输出样例
a 2
i 2
is 2
it 2
am 1
我希望有详细的注释!!!!在线等~
▼优质解答
答案和解析
//#include "stdafx.h"//vc++6.0加上这一行.
#include "stdio.h"
#include "string.h"
#include "stdlib.h"
struct word{//建立一个结构体记录单词及数量
    char w[21];
    int n;
};
int main(void){
    struct word a[10000]={"",0,},tmp;//声明一个10000个元素的结构体数组作记录空间
    FILE *fp;
    int x,i,j,k=1;
    char wt[21],wh[21];
    if((fp=fopen("case1.in","r"))==NULL){//打开文件
        printf("Open the file failure...\n");
        exit(0);
    }
    while(fscanf(fp,"%s",wt),!feof(fp)){ //读一个单词
        if(wt[x=strlen(wt)-1]=='-'){//这个“单词”末尾是'-'的话接着读后面的“单词”
            wt[x]='\0';
            fscanf(fp,"%s",wh);
            strcat(wt,wh);//把后面读到的“单词”与前面读到的拼为一个单词
        }
        for(i=0;i<=x;wt[i++]|=0x20);//把单词中的大写变为小写
        if(wt[x]>'z' || wt[x]<'a')//单词末尾有标点符号的话去掉
            wt[x]='\0';
        for(i=0;i            if(strcmp(wt,a[i].w)==0){//有的话免记录,将记录数量增1,跳出
                a[i].n++;
                break;
            }
        }
        if(i==k){//未检索到刚读到的单词则追加记录且将数量置1
            strcpy(a[k].w,wt);
            a[k++].n=1;
        }
    }
    fclose(fp);//读完关闭文件
    for(i=0;i        for(x=i,j=x+1;j            if(a[x].n        if(x!=i){
            tmp=a[x];
            a[x]=a[i];
            a[i]=tmp;
        }
    }
    for(i=0;i        for(x=i,j=x+1;j            if(a[x].n==a[j].n && strcmp(a[x].w,a[j].w)>0) x=j;
        if(x!=i){
            tmp=a[x];
            a[x]=a[i];
            a[i]=tmp;
        }
    }//以上两次排序都用的是选择法
    printf("The result is as following:\n");//输出前5项
    for(i=0;i<5;printf("%-20s %d\n",a[i++].w,a[i].n));
    return 0;
}
看了c语言:文件操作与字符处理11...的网友还看了以下:

仿照对“新”的分析,另选一个形声字分析并推断它的本义。(5分)示例:新字形分析:右为斤,左为辛木二  2020-07-05 …

英语翻译对会计信息失真问题的探讨本文从会计信息失真的现状出发,揭示其危害,并分析会计信息失真的原因  2020-07-28 …

案例分析请高手帮忙作答。。。本题20分三、案例分析近期,农民卖菜难成为社会关注的热点问题,三分钱一斤  2020-11-06 …

8、马克思恩格斯运用辩证法的基本原理,着重剖析资本主义社会,揭示了资本主义经济发展的规律,形成了科学  2020-11-23 …

阅读下面文段,按要求回答问题:很多人期望自己一天能记住成百上千的单词,对提供这种可能的产品或软件趋之  2020-12-09 …

阅读下面的文章,完成后面题目。伦理本位梁漱溟缺乏集团生活之中国人,则一面不知有团体,一面不知有个人。  2020-12-09 …

修改病句(分析)5.没有语病的一项是()A.本来是为社会捕捉热点、剖析焦点的大众传媒,由于竞相改革,  2020-12-12 …

下列各句中没有语病的一句是[]A.本来是为社会捕捉热点、剖析焦点的大众传媒,由于竞相改革,竟成为社会  2021-01-14 …

下列各句中,没有语病的一句是A.本来是为社会捕捉热点,剖析焦点的大众传媒,由于竞相改革,竟成为社会关  2021-01-14 …

纯碱和烧碱混合后制成溶液,为什么会有结晶析出本来透明的溶液先是有少量沉淀析出,放置一段时间后出现结晶  2021-02-01 …