當前位置:成語大全網 - 新華字典 - C語言 計算壹篇英文文章中出現次數最多的前5個單詞,按英文字典順序輸出.

C語言 計算壹篇英文文章中出現次數最多的前5個單詞,按英文字典順序輸出.

其實用gets 讀取整行再作處理比較容易的,在此用getc會讓程序變得戶復雜,容易出錯

給妳個例子作參考,也看看註釋嘗試了解吧:

#include <stdio.h>

#include <string.h>

struct WORD_FOUND //用來存放結果的結構

{

char szWord[256];

int nCount;

};

WORD_FOUND g_WordFound[100]={{"",0}};

int g_nMatch=0;

int main()

{

char szText[1024];

char szWord[512];

FILE * fp;

int i;

if ((fp=fopen("case1.in","r"))==NULL) //打開文件

{printf("wrong");return 1;} //打開不了就輸出 wrong

while(fgets(szText,sizeof(szText)-1,fp)) //這裏讀整行,處理比較有效,不容易出錯

{

char *tmp=szText,*end=szText+strlen(szText);

char *endChr;

while (tmp<end)

{

while (*tmp==' '||*tmp=='\n'||*tmp=='\t') tmp++; //這裏跳過空格

endChr=tmp;

while (*endChr&&*endChr!='\n'&&*endChr!='\r'&&*endChr!=' ') endChr++;//這裏尋找下個空格

memset(szWord,0,sizeof(szWord));

strncpy(szWord,tmp,endChr-tmp);//找到的字符,存在 szWord裏

bool bFound=false;

for (i=0;i<g_nMatch;i++)//尋查已經找到的字符

{

if (strcmp(g_WordFound[i].szWord,szWord)==0)//如果相配

{

g_WordFound[i].nCount++;//加上1

bFound=true;

break;

}

}

if (!bFound&&strlen(szWord)>0)//如果沒相配,把字符存在g_WordFound裏

{

strcpy(g_WordFound[g_nMatch].szWord,szWord);

g_WordFound[g_nMatch].nCount++;

g_nMatch++;

}

tmp=endChr;

if (tmp>=end) break;

}

}

//此處打印結果

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

{

printf("%s = %d\n",g_WordFound[i].szWord,g_WordFound[i].nCount);

}

return 0;

}