首页 > 其他 > 详细

统计一篇英语文章中每个单词出现次数并输出出现频率最高的10个单词

时间:2014-03-02 14:23:19      阅读:1282      评论:0      收藏:0      [点我收藏+]

---恢复内容开始---

#include<iostream>
#include<string>
#include<string>
#include<fstream>
using namespace std;
char *creatArray()//创建字符数组将文件内容写入字符数组中
{
FILE*fp;
if((fp=fopen("ss.txt","r+"))==NULL)
{
cout<<"cant open the file"<<endl;
exit(0);
}
int sum=0,i=0;//sum统计共有多少个字符,包含空格等字符
while(fgetc(fp)!=EOF)
sum++;
char*array=new char[sum+1];//多创建一个字符空间来存储“\0”,以表示结尾
fp=fopen("ss.txt","r+");
array[0]=fgetc(fp);
while(!feof(fp))
{

i++;
array[i]=fgetc(fp);


}
cout<<"总计"<<sum<<"个单词"<<endl;
array[sum]=‘\0‘;
return array;//返回包含文件所有内容的数组
}
void print()
{
char*destr=creatArray();

int num=1;//num用来存储共多少个单词
int sum=0;//存储共多少个单词,与print()函数中的sum不同,它不包含空格等字符
char *p=destr;
while(*p!=‘\0‘)//统计num
{
if(*p>=‘A‘&&*p<=‘Z‘)
{
*p=*p-‘A‘+‘a‘;
}
if(*p==‘ ‘||*p==‘,‘||*p==‘.‘||*p==‘\"‘||*p==‘:‘||*p==‘!‘||*p==‘\‘‘)
{
num++;
*p=‘\0‘;
}
p++;
}
int *account=new int[num];//用来统计每个单词的出现次数
account[0]=1;
for(int i=1;i<num;i++)
account[i]=0;
char *valueA=destr;//valueA从第二个单词开始记录
for(i=0;i<num-1;i++)
{
valueA+=(strlen(valueA)+1);
char *valueB=destr;//valueB查看是否与valueA相等
for(int j=0;j<num;j++)
{
if(strcmp(valueA,valueB)==0)//若相等则对应次数增加,且break再次搜寻,若还相等则对应次数再次增加......
{
account[j]++;
break;
}
else
valueB+=(strlen(valueB)+1);//指向下一个
}

}

valueA=destr;
ofstream outfile("ww.txt",ios::out);
if(!outfile)
{
cout<<"open error!"<<endl;
exit(1);
}
for(i=0;i<num;i++)
{
if(account[i]&&*valueA!=‘\0‘)
{

outfile<<valueA;//将不再有重复的单词写入文件
outfile<<" ";
cout<<valueA<<" 出现的次数:"<<account[i]<<endl;

sum++;
}
valueA+=(strlen(valueA)+1);//指向下一个
}
outfile.close();
cout<<endl<<"出现频率最高的10个英语单词以及各自出现的次数是:"<<endl;

/*此时每个单词不再重复*/
/*从现在开始搜寻出现频率出现最高次数的10个单词,具体思路是两个数组分别储存各个单词和分别对应的次数,其中储存单词的数组类型是string,进行10次循环,
每次可以找出一个符合要求的单词并输出,期间可用m记录是第几个单词,然后下一次循环开始之前sum--(单词总数减一),单词数组中被输出单词后的每个单词向前
移动一位(总数组长度减一),记录次数的数组采取同样方法,最后通过10次循环可找出10个单词*/

int*amount=new int[sum];//用来统计每个单词出现的次数
string*value=new string[sum];//用来存放单词
ifstream infile("ww.txt",ios::in);
if(!infile)
{
cout<<"open error!"<<endl;
exit(1);
}
for(i=0;i<sum;i++)
{
infile>>value[i];//将无重复单词的文件中的每个单词写入数组
}
int n=0;
valueA=destr;
for(i=0;i<num;i++)//记录单词出现次数
{
if(account[i]&&*valueA!=‘\0‘)
{

amount[n]=account[i];
n++;
}
valueA+=(strlen(valueA)+1);
}
int m,k;
for(k=0;k<10;k++)
{
int max=amount[0];
for(i=0;i<sum;i++)
{
if(max<amount[i])
{
max=amount[i];
m=i;
}
}
sum--;
cout<<value[m]<<"出现次数"<<max<<endl;
for(i=m;i<sum;i++)//缩减数组
{
amount[i]=amount[i+1];
value[i]=value[i+1];
}
}

}
int main()
{
print();
return 0;
}

 

 

---恢复内容结束---

统计一篇英语文章中每个单词出现次数并输出出现频率最高的10个单词,布布扣,bubuko.com

统计一篇英语文章中每个单词出现次数并输出出现频率最高的10个单词

原文:http://www.cnblogs.com/guozw/p/3575408.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!