//#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(); } }