输出一篇英文文章前十个出现频率最高的单词
2014-03-02 20:35
435 查看
#include<iostream>
using namespace std;
#define M 100
#define N 50
int main()
{
FILE *fp;
char *p,ch,temp
={'\0'},str[M]
={'\0'},g
;
int i=0,j=0,a[M]={0}, b[M]={0}, v;
cout<<"请输入文件路径:";
cin>>g;
if((fp=fopen(g,"r"))==NULL)
{
printf("无法打开此文件\n");
exit(0);
}
//读取文件并把所有单词存储在str[M]
中。
while(!feof(fp))
{
ch=fgetc(fp);
if((ch>='A'&&ch<='Z')||(ch>='a'&&ch<='z'))
{temp[j++]=ch;}
else
{p=strlwr(temp);strncpy(str[i++],p,j); j=0;}
}
// 计算各个单词数量 存储在a[M]中,str[k]单词个数为a[k]
for(int k=0;k<i;k++)
{ v=0; //当一个单词只出现一次时,作为标识符v=0
if(strcmp(str[k],"\0")!=0)
{
for(int t=k+1;t<i;t++)
{
if(strcmp(str[k],str[t])==0)
{
if(a[k]==0)
{a[k]=1;}
a[k]++;
strcpy(str[t],"\0");
v=1;
}
}
if(v==0){a[k]=1;}
}
}
//复制数组a[]到b[]
for(int x=0;x<M;x++)
{
b[x]=a[x];
}
int c;
//冒泡排序
for(int y=0;y<M-1;y++)
{
for(int z=0;z<M-1-y;z++)
{
if(a[z]<a[z+1])
{c=a[z]; a[z]=a[z+1]; a[z+1]=c;}
}
}
//输出前十个出现频率最高的单词
for(int h=0;h<10;h++)
{
for(i=0;i<M;i++)
{ if(a[h]==0)break;
if(a[h]==b[i])
{
b[i]=0; printf("%s",str[i]); cout<<"="<<a[h]<<endl; break;
}
}
}
//关闭文件
fclose(fp);
return 0;
}
/*解题思路:先将文件里的所有内容都读出来,在读的过程中根据单词之间的分隔符,将一个个单词分离出来并存储,最后在计算各个单词出现的次数,并输出前十个出现频率最高的单词。
在编这个程序时遇到的问题:当定义一个字符数组时没有初始化,若之后在程序中赋值给该字符数组的长度小于该定义的字符数组长度时,输出时就会出现多余的乱码 ,避免此问题出现就要在定义字符数组时初始化例如 char a[10]={'\0'}; 另外在c语言和c++中不存在字符串变量,也不存在字符串数组。*/
using namespace std;
#define M 100
#define N 50
int main()
{
FILE *fp;
char *p,ch,temp
={'\0'},str[M]
={'\0'},g
;
int i=0,j=0,a[M]={0}, b[M]={0}, v;
cout<<"请输入文件路径:";
cin>>g;
if((fp=fopen(g,"r"))==NULL)
{
printf("无法打开此文件\n");
exit(0);
}
//读取文件并把所有单词存储在str[M]
中。
while(!feof(fp))
{
ch=fgetc(fp);
if((ch>='A'&&ch<='Z')||(ch>='a'&&ch<='z'))
{temp[j++]=ch;}
else
{p=strlwr(temp);strncpy(str[i++],p,j); j=0;}
}
// 计算各个单词数量 存储在a[M]中,str[k]单词个数为a[k]
for(int k=0;k<i;k++)
{ v=0; //当一个单词只出现一次时,作为标识符v=0
if(strcmp(str[k],"\0")!=0)
{
for(int t=k+1;t<i;t++)
{
if(strcmp(str[k],str[t])==0)
{
if(a[k]==0)
{a[k]=1;}
a[k]++;
strcpy(str[t],"\0");
v=1;
}
}
if(v==0){a[k]=1;}
}
}
//复制数组a[]到b[]
for(int x=0;x<M;x++)
{
b[x]=a[x];
}
int c;
//冒泡排序
for(int y=0;y<M-1;y++)
{
for(int z=0;z<M-1-y;z++)
{
if(a[z]<a[z+1])
{c=a[z]; a[z]=a[z+1]; a[z+1]=c;}
}
}
//输出前十个出现频率最高的单词
for(int h=0;h<10;h++)
{
for(i=0;i<M;i++)
{ if(a[h]==0)break;
if(a[h]==b[i])
{
b[i]=0; printf("%s",str[i]); cout<<"="<<a[h]<<endl; break;
}
}
}
//关闭文件
fclose(fp);
return 0;
}
/*解题思路:先将文件里的所有内容都读出来,在读的过程中根据单词之间的分隔符,将一个个单词分离出来并存储,最后在计算各个单词出现的次数,并输出前十个出现频率最高的单词。
在编这个程序时遇到的问题:当定义一个字符数组时没有初始化,若之后在程序中赋值给该字符数组的长度小于该定义的字符数组长度时,输出时就会出现多余的乱码 ,避免此问题出现就要在定义字符数组时初始化例如 char a[10]={'\0'}; 另外在c语言和c++中不存在字符串变量,也不存在字符串数组。*/
相关文章推荐
- 读取一篇英文文档,并输出其中出现频率最多的十个单词
- 统计一篇英文文章内每个单词出现频率,并返回出现频率最高的前10个单词及其出现次数
- js查找一篇英文文章中出现频率最高的单词
- java实现读取一篇英文文章,统计其中每个单词出现的次数并排序输出
- 写一个程序,分析一个文本文件(英文文章)中各个单词出现的频率,并且把频率最高的10词打印出来
- 编程实现:分析一个文本文件(英文文章)中各个词出现的频率,并把频率最高的前十个词打印出来
- 读取一段文档,输出每个单词出现的频率,并且把出现频率最高的十个单词输出。
- 给定一篇英文文章,找出其中使用频率最高的英语单词。
- Linux作业(三)-shell统计某文章中出现频率最高的N个单词并排序输出出现次数
- 找出一篇英语文档中出现频率最高的十个单词
- 一道Java面试题 读取一篇英文文章,输出其中出现单词的次数最多的5个,写java函数
- 用C语言实现了对英文文章中单词频率的统计,得到出现最多的前十个!
- JS查找英文文章中出现频率最高的单词
- Linux作业(三)-shell统计某文章中出现频率最高的N个单词并排序输出出现次数
- 一篇文章中求出现频率最高的10个单词(C++实现tanglanting)
- Java面试题,读取一篇英文文章,输出其中出现单词的次数最多的5个
- 输入一段英文文本,用程序统计出现频率最高和最低的两个单词;
- 分析文本文件中各单词出现的频率,并把频率最高的十个词打印出来
- 用java程序分析一个文本文件中各个词出现的频率,并把频率最高的十个单词打印出来(一般的冠词,虚词除外)
- 编写一个程序,分析一个文本文件(英文文章)中各个词出现的频率,并把频率最高的10个词打印出来