#C 期末作業(yè)

*Description
在當(dāng)前目錄中存在文件名為"case1.in"(其中case后為數(shù)字1,不是字母l,寫錯(cuò)提交后會判錯(cuò))的文本文件,
其內(nèi)容為一篇英文文章(以EOF作為結(jié)束標(biāo)志)。現(xiàn)要求讀取該文本文件內(nèi)容,統(tǒng)計(jì)文章中每個(gè)單詞出現(xiàn)的次數(shù),
并輸出出現(xiàn)次數(shù)最多的前5個(gè)單詞及其出現(xiàn)次數(shù)(按出現(xiàn)次數(shù)由多到少的順序輸出,次數(shù)相同時(shí)按字典順序輸出,
不足5個(gè)單詞時(shí),按序輸出全部單詞)。程序中注意如下細(xì)節(jié):
(1) 空格、標(biāo)點(diǎn)符號與回車符起到分隔單詞的作用。
(2) 文章一行的末尾可能有連字符,出現(xiàn)連字符時(shí),該行最末的字符串與下行最先出現(xiàn)的字符串構(gòu)一個(gè)單詞;
(3) 名詞縮寫算一個(gè)單詞;
(4) 數(shù)字不算單詞;
(5) 單詞不區(qū)分大小寫;
(6) 輸出時(shí)單詞全使用小寫;
OJ截圖
//代碼片段。
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <string.h>

//定義結(jié)構(gòu)體。
struct list
{
    int time;
    char words[21];
}word[10001];

int main()
{
    //聲明變量。
    FILE *fp;
    fp=fopen("case1.in","r");
    int count=0,num=0,q=0,i;
    char ch,temp[21];

    //初始化結(jié)構(gòu)體數(shù)組
    for(num=0;num<10001;num++)
    {
        word[num].time=1;//次數(shù)歸一
        memset(word[num].words,0,sizeof(word[num].words));
    }

    //重做文件讀取操作。更簡!更簡!更簡?。。?!
    while((ch=fgetc(fp))!=EOF)
    {
        if(ch>='a'&&ch<='z')
            word[count].words[q++]=ch;

            //大小寫轉(zhuǎn)換
        else if(ch>='A'&&ch<='Z')
            word[count].words[q++]=ch+32;

            //分頁符轉(zhuǎn)換
        else if(ch=='-')
        {
            ch=fgetc(fp);
            if(ch=='\n')
                continue;
            else
            {
                count++;
                q=0;
                if(ch>='a'&&ch<='z')
                    word[count].words[q++]=ch;
                else if(ch>='A'&&ch<='Z')
                    word[count].words[q++]=ch+32;
            }
        }
        else
        {
            count++;
            q=0;
        }
    }

    //對比相同 加次數(shù) 清同串。
    for(num=0;num<count;num++)
    {
        for(i=num+1;i<count;i++)
            if(!strcmp(word[num].words,word[i].words))
            {
                word[num].time++;
                memset(word[i].words,0,sizeof(word[i].words));
            }
    }

    //清其他字符干擾。
    for(i=0;i<count;i++)
    {
        if(word[i].words[0]<'a'||word[i].words[0]>'z')
        {
            word[i].time=0;
        }
    }

    //重做排序 更快!更快!更快?。。?!
    for(i=1;i<count;i++)
        for(num=0;num<count-i;num++)
        {
            if(word[num].time<word[num+1].time)
            {
                //次數(shù)排序
                int t=word[num].time;
                word[num].time=word[num+1].time;
                word[num+1].time=t;
                strcpy(temp,word[num].words);
                strcpy(word[num].words,word[num+1].words);
                strcpy(word[num+1].words,temp);
            }
            else if(word[num].time==word[num+1].time)
            {
                //字母順序
                if(strcmp(word[num].words,word[num+1].words)>0)
                {
                    strcpy(temp,word[num].words);
                    strcpy(word[num].words,word[num+1].words);
                    strcpy(word[num+1].words,temp);
                }
            }
        }

    //輸出方法。
    for(i=0;i<5;i++)
    {
        printf("%s %d\n",word[i].words,word[i].time);
    }

    //關(guān)閉文件
    fclose(fp);
    return 0;
}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Ubuntu的發(fā)音 Ubuntu,源于非洲祖魯人和科薩人的語言,發(fā)作 oo-boon-too 的音。了解發(fā)音是有意...
    螢火蟲de夢閱讀 100,681評論 9 468
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法,類相關(guān)的語法,內(nèi)部類的語法,繼承相關(guān)的語法,異常的語法,線程的語...
    子非魚_t_閱讀 34,706評論 18 399
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,568評論 19 139
  • linux資料總章2.1 1.0寫的不好抱歉 但是2.0已經(jīng)改了很多 但是錯(cuò)誤還是無法避免 以后資料會慢慢更新 大...
    數(shù)據(jù)革命閱讀 13,246評論 2 33
  • “十畝之間”是《詩經(jīng)·魏風(fēng)》中的一首詩。 十畝之間兮,桑者閑閑兮,行與子還兮。 十畝之外兮,桑者泄泄兮,行與子逝兮...
    一夕厘閱讀 1,011評論 0 0

友情鏈接更多精彩內(nèi)容