编写一个程序.功能是读入一篇英文文章,统计该文章中每个单词的出现次数,并输出出现次数最多的前5个单词及其出现次数.注意:① 单词不区分大小写,比如:The和the是相同的单词.② 按照英

来源:学生作业帮助网 编辑:作业帮 时间:2024/04/28 00:25:04
编写一个程序.功能是读入一篇英文文章,统计该文章中每个单词的出现次数,并输出出现次数最多的前5个单词及其出现次数.注意:① 单词不区分大小写,比如:The和the是相同的单词.② 按照英

编写一个程序.功能是读入一篇英文文章,统计该文章中每个单词的出现次数,并输出出现次数最多的前5个单词及其出现次数.注意:① 单词不区分大小写,比如:The和the是相同的单词.② 按照英
编写一个程序.功能是读入一篇英文文章,统计该文章中每个单词的出现次数,并输出出现次数最多的前5个单词及其出现次数.
注意:
① 单词不区分大小写,比如:The和the是相同的单词.
② 按照英文书写习惯,过长的单词遇到换行时,会加入连字符“-”.比如:“international”遇到换行时可能会写为“intern-ational”,统计时要注意除去连字符.
不要copy,要能自己调试成功的,现成的C代码也好!

编写一个程序.功能是读入一篇英文文章,统计该文章中每个单词的出现次数,并输出出现次数最多的前5个单词及其出现次数.注意:① 单词不区分大小写,比如:The和the是相同的单词.② 按照英

刚用C语言写的,功能实现,但有很多可以优化的地方,自己改吧,不明白的追问:

#include <stdio.h>

#include <string.h>

//能统计的最大单词个数,可以自己改

#define MAX_WORD_COUNT 500

//结构体,保存每个单词及对应的个数

typedef struct WordCount

 {

 char cWord[20];

 int  iCount;

}T_WordCount;

 

int CalcEachWord(const char *pText);//计算单词个数及输出信息等

void LowerText(char *pText);//把单词变成小写形式

void SwapItem(T_WordCount *ItemA, T_WordCount * ItemB);//交换两个元素

void SortWord(T_WordCount *pWordSet);//排序

 

int main(int argc, char *argv[])

{

 //测试文本

 char pText[] ="Text HAs HAS ONE h-as MOrE Has MORE ha-S BLANk more blank or more oR blank  Between   wor-ds.";

 printf("The text is :\n");

 printf("----------------------------------\n");

 printf("%s\n", pText);

 printf("----------------------------------\n");

 printf("The top 5 words is :\n");

 

 CalcEachWord(pText); return 0;

}

 

int CalcEachWord(const char *pText)

{

 char cTmp[20] = {0}; 

 int  i   = 0;

 char *pTmp   = cTmp;

 int  iFlag   = 0;

 

 T_WordCount tWordSet[MAX_WORD_COUNT];

 memset(tWordSet, 0, sizeof(tWordSet));

 

 while (*pText != '\0')

 { 

  if ((*pText >= 'A' && *pText <= 'Z') || (*pText >= 'a' && *pText <= 'z'))

  {   

 

   *pTmp = *pText;

   pTmp++;

 

  }

  else if (*pText == '-')

  {

   ++pText;

   continue;

  }

  else

  { 

 

   if (strlen(cTmp) > 0)

   {

    LowerText(cTmp);

    iFlag = 0;

    for (i = 0; i < MAX_WORD_COUNT; ++i)

    {

     if (strlen(tWordSet[i].cWord) > 0)

     {

      if (strcmp(tWordSet[i].cWord, cTmp) == 0)

      {

       iFlag = 1;

       tWordSet[i].iCount++;

       break;

      }     

     }

     else

     {

      strcpy(tWordSet[i].cWord, cTmp);

      tWordSet[i].iCount = 1;

      iFlag = 1;

      break;

     }

 

    }

    if (!iFlag)

    {

     printf("No more space to save word.\n");

    }

 

   }

   memset(cTmp, 0, 20);

   pTmp = cTmp;

  }

 

  ++pText;

 }

 

//排序 SortWord(tWordSet);

 for (i = 0; i < 5; ++i)

 {

  if (strlen(tWordSet[i].cWord) > 0)

  {

   printf("%s:%d\n",tWordSet[i].cWord,tWordSet[i].iCount);

  }

 }

 

 return 0;

}

 

void LowerText(char *pText)

{

 char *pTmp = pText;

 while (*pTmp != '\0')

 {

  if ((*pTmp >= 'A' && *pTmp <= 'Z'))

  {

   *pTmp += 32 ;

  }

 

  pTmp++; }

}

 

void SwapItem(T_WordCount *ItemA, T_WordCount * ItemB)

{

 T_WordCount Tmp;

 memset(&Tmp, 0, sizeof(T_WordCount));

 strcpy(Tmp.cWord, ItemA->cWord);

 Tmp.iCount = ItemA->iCount;

 

 strcpy(ItemA->cWord, ItemB->cWord); ItemA->iCount = ItemB->iCount;

 strcpy(ItemB->cWord, Tmp.cWord); ItemB->iCount = Tmp.iCount;

}

//冒泡排序算法

void SortWord(T_WordCount *pWordSet){

 int i,j; 

 for (j = 0; j < MAX_WORD_COUNT - 1; j++) 

 {   

  for (i = 0; i < MAX_WORD_COUNT - 1 - j; i++) 

  {     

   if (pWordSet[i].iCount < pWordSet[i+1].iCount)     

   {                             

    SwapItem(&pWordSet[i], &pWordSet[i+1]);

   }     

  } 

 }

}

测试结果截图:

编写一个程序.功能是读入一篇英文文章,统计该文章中每个单词的出现次数,并输出出现次数最多的前5个单词及其出现次数.注意:① 单词不区分大小写,比如:The和the是相同的单词.② 按照英 该程序的功能是:读入一个整数(2 使用C语言编写一个为英文文章每个单词标序号并输出结果的程序.求一个C语言编写的程序,可实现我所说的功能:可以将一篇英文文章(以.txt格式存在)中的所有单词(不包括标点符号)顺 【C语言】下面程序的功能是:读入一个整数m,计算如下公式的值:下面程序的功能是:读入一个整数m,计算如下公式的值:我的程序哪里错了. 编写程序读入一个整数,显示它的所有素数因子.例如,若输入整数为120,输出应为2、2、2、3、5.(用java编写) 编写程序,统计一个班的学生成绩.要求程序具有如下功能:(1) 每个学生的学号和四门功课的成绩从键盘读入.(2) 计算每个学生的总分和平均分.(3) 按平均成绩进行排序,输出排序后的成绩单( 编写一个程序,读入 3 56 45 24(个数由输入的第一个整数决定)输出最大,小值.而结果找出最小值为24.最大用JAVA程序编写.编写一个程序,读入 3 56 45 24(个数由输入的第一个整数决定)输出最大,小值, 帮忙看看哪里错了~~编写一个,功能是:返回字符串中指定字符的个数.在主函数中读入一个字符串,并读入一个要统计的字符,调用该函数统计的该字符出现的次数,并输出结果.#include <stdio.h> java 求一个整数各数位的和 实验内容:编写一个程序,读入0到1000之间的一个整数,并将其各位数字加起来 编写一个程序,其功能是判断某个整数是否为素数,且程序中能够调用该函数,以实现求1000内的所有素数和. 存在一篇英文文章(以串表示),以及若干关键字.编写程序统计关键字的出现次数.基本要求:改进KMP算法以适应多关键字匹配. C语言题:有一篇文章,共有3行文字,每行有80个字符.编写程序分别统计出其中英文大写字母、英文小写字母有一篇文章,共有3行文字,每行有80个字符.编写程序分别统计出其中英文大写字母、英 C语言编写一个程序,实现如下功能:从键盘输入一个三位数,求各位数字之和. 读入一个整数,统计并输出该数字‘2’的个数.要求定义并调用函数countdigit(number,digit),它的功能是统 数对 C语言编写一个程序,该程序从用户读入一个整数,然后列出所有的数对,每个数对的乘积即为该数.输入格式:输入只有一行,即一个整数.输出格式:输出有若干行,每一行是一个乘法式子.( 求编写linux shell 程序求和使用for语句创建一个shell程序,其功能是1+2+3+…+n.请高手们帮下忙!要可...求编写linux shell 程序求和使用for语句创建一个shell程序,其功能是1+2+3+…+n.请高手们帮下忙!要 看看这个程序怎么编写.假设称正读和反读都相同的字符序列为回文,假如abba和abcba是回文,abcda则不是回文,试编写算法判别读入的一个以@为结束符的字符序列是否为回文.基于队列的 用pascal 语言编写一个程序读入一系列字符,将它们分别放在英文字母、数字、其他符号三个集合中编写一个程序读入一系列字符,将它们分别放在英文字母、数字、其他符号三个集合中,统计出