统计一篇英文文章中出现次数最多的前五个单词
2013-03-05 10:22
826 查看
#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", cBuf); printf("----------------------------------\n"); printf("The top 5 words is :\n"); CalcEachWord(cBuf); 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]); } } } }
相关文章推荐
- Java统计一篇文章中出现次数最多的汉字或英文单词 又出现次数的统计
- 统计一篇英文文章中所有的单词以及出现的次数
- 统计一篇英文文章内每个单词出现频率,并返回出现频率最高的前10个单词及其出现次数
- Java面试题,读取一篇英文文章,输出其中出现单词的次数最多的5个
- java实现读取一篇英文文章,统计其中每个单词出现的次数并排序输出
- 一道Java面试题 读取一篇英文文章,输出其中出现单词的次数最多的5个,写java函数
- Java统计英文句子中出现次数最多的单词并计算出现次数的方法
- 金山2014秋招笔试题——统计单词在一篇文章中出现的次数和位置
- Java实现统计一篇文章中每个单词出现的次数
- 用C语言实现了对英文文章中单词频率的统计,得到出现最多的前十个!
- JAVA-统计英文句子中出现次数最多的单词和出现的次数
- 用array_count_values统计一篇英文文档中每个单词的出现次数,结果用表格展示出来
- 微软笔试题 统计英文电子书中出现次数最多的k个单词
- 转载:统计一串英文中出现次数最多的单词以及次数;
- 统计一篇英文文件中,单词出现的次数,并按单词的长度进行排序
- Java统计一篇英文单词出现次数
- 【java】统计一篇英文文章每个字母出现的次数
- 微软笔试题 统计英文电子书中出现次数最多的k个单词
- 统计一篇英文中每个单词出现的次数
- 统计一篇文章中每个单词出现的次数