---恢复内容开始---
#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