📄 统计单词.cpp
字号:
/* 分类统计文章(存放在文件中)中各个单词出现的个数,并按照出现
次数从高到低的顺序排序,结果存入文件中。(文章的单词分隔符号可以随意
指定)
文件必须为英语
*/
#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为单词中个数
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<<"单词出现的个数排序:"<<endl;
for(i=0;i<n;i++)
{
cout<<"单词:"<<a[i].word<<" 个数:"<<a[i].n<<endl;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -