10大高頻率單詞篩選,10頻率單詞篩選
//#include<iostream.h>
#include<string.h>
#include<fstream.h>
struct Word //定義結構數組儲存單詞
{
char w[20];
int num;
}Word[10000];
void main() //主函數
{
ifstream infile("test1.txt",ios::in);
char a,t[20];
int n;
int wordTypeNum=0,wordNum=0;
int i;
int j;
int ijt;
for(i=0;i<10000;i++) // 給結構數組頻率計數num賦初值0
Word[i].num=0;
strcpy(Word[0].w,"wow\0"); //為以後編程方便,將第一個結構成員w賦一個絕對不是單詞的詞
if(!infile) //判斷文件是否打開成功打開
cerr<<"File open error"<<endl;
else
{
while(infile.get(a)) //依次讀取txt文件中每個字符
{
if(a==' '||a==','||a==','||a=='!'||a=='?'||a=='"'||a==':'||a==';') //這些為單詞間隔符,不全
{
t[wordNum]='\0'; //單詞結束
for(i=0;i<=wordTypeNum;i++) //和前面已儲存單詞進行比較
{
if(strcmp(t,Word[i].w)==0) //找到相同的單詞,num累加1
{
Word[i].num++;wordNum=0;
}
}
if(strcmp(t,Word[i].w)!=0) //沒找到相同的單詞,在新的結構體內儲存新單詞
{
wordTypeNum++;
strcpy(Word[wordTypeNum].w,t);
Word[wordTypeNum].num++;
wordNum=0;
}
}
else //字符組成單詞
{
t[wordNum]=a;
wordNum++;
}
}
/*cout<<endl;
for(i=1;i<=wordTypeNum;i++)
cout<<Word[i].w<<" "<<Word[i].num<<endl;*/
for(i=1;i<wordTypeNum;i++) //將結構數組根據num成員從大到小排列
{
for(j=1;j<wordTypeNum-i;j++)
{
if(Word[j].num<Word[j+1].num)
{
ijt=Word[j].num;
Word[j].num=Word[j+1].num;
Word[j+1].num=ijt;
}
}
}
cout<<"頻率最高的10個單詞如下:"<<endl;
for(i=1;i<=10;i++) //輸出前10個
{
cout<<Word[i].w<<" "<<Word[i].num<<endl;
}
infile.close();
}
}