?? 統(tǒng)計單詞.cpp
字號:
/* 分類統(tǒng)計文章(存放在文件中)中各個單詞出現(xiàn)的個數(shù),并按照出現(xiàn)
次數(shù)從高到低的順序排序,結(jié)果存入文件中。(文章的單詞分隔符號可以隨意
指定)
文件必須為英語
*/
#include <iostream>
#include <string.h>
using namespace std;
class typeword
{
public:
char word[50];
int n;
};
void putin(char *filename,char *divide,FILE *fp);
int count(char *tmp,int *n,typeword a[100]);
void sort(int n,typeword a[100]);
void print(int n,typeword a[100]);
void main()
{
FILE *fp;
char filename[50];
char divide[]=",;. \r\t\n";
cout<<"請輸入文件路徑:"<<endl;
gets(filename);
if((fp=fopen(filename,"r"))==NULL)
{
cout<<"cann't open file"<<endl;
cout<<"請從新輸入文件路徑:"<<endl;
while((fp=fopen(filename,"r"))==NULL)
{
gets(filename);
}
}
putin(filename,divide,fp);
}
void putin(char *filename,char *divide,FILE *fp)
{
int i,k=0;
char c;
char tmp[100];
int n=0,flag=1; //n為單詞中個數(shù)
typeword a[100];
while(1)
{
fscanf(fp,"%c",&c);
if(feof(fp))
{
if(k!=0) //判斷文件最后是否有分割符
{
count(tmp,&n,a);
}
sort(n,a);
print(n,a);
return ;
}
for(i=0;divide[i]!='\0';i++)
{
if(c==divide[i])
{
if(flag==0)
{
flag=1;
k=0;
n=count(tmp,&n,a);
break;
}
else
break;
}
}
if(divide[i]=='\0')
{
flag=0;
tmp[k++]=c;
tmp[k]='\0';
}
}
}
int count(char *tmp,int *n,typeword a[100])
{
int i=0;
if(*n==0)
{
strcpy(a[0].word,tmp);
a[0].n=1;
(*n)++;
}
else
{
for(i=0;i<*n;i++)
{
if(strcmp(a[i].word,tmp)==0)
{
a[i].n++;
break;
}
}
if(i==*n)
{
a[*n].n=1;
strcpy(a[*n].word,tmp);
(*n)++;
}
}
return *n;
}
void sort(int n,typeword a[100])
{
int i,j,max;
typeword tmp;
for(i=0;i<n;i++)
{
max=i;
for(j=i+1;j<n;j++)
{
if(a[max].n<a[j].n)
{
max=j;
}
}
if(max!=i)
{
tmp=a[max];
a[max]=a[i];
a[i]=tmp;
}
}
}
void print(int n,typeword a[100])
{
int i;
cout<<"單詞出現(xiàn)的個數(shù)排序:"<<endl;
for(i=0;i<n;i++)
{
cout<<"單詞:"<<a[i].word<<" 個數(shù):"<<a[i].n<<endl;
}
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -