用C++输入一篇英文文章,以$符号结束,统计其中出现频率最高的单词
2个回答
展开全部
c++还没有全学完,只能用有限的一点知识编了一个,功能有限,如区分大小写啦,单数和复数也要区分为不同单词啦等等,还有就是对文章输入字符多少的限制啦(最好不超过1000个单词,可能会溢出,但这可以在程序中更改)。好了总之,一个非常完整的程序不可能再这么短时间编写出来,lz就当参考下吧。
代码如下:
#include<iostream>
#include<string>
#include<vector>
#pragma warning (disable:4786)
using namespace std;
int main()
{
int i,j,m,n,q,a[200],c[1000];
m=n=0;
char *p;
vector<string> s;
char save[20],str[200],len[10000];
string str1,str2,str3[200];
for(i=0;i<100;i++)
a[i]=0;
cout<<"请输入短文内容并以$结束:"<<endl;
while(cin)
{
cin.getline(str,200);
str1=str;
if(str1=="$")
break;
s.push_back(str1);
}
for(i=0;i<s.size();i++)
str2=str2+s[i]+" ";
str2=str2+"\0";
strcpy(len,str2.c_str ());
p=len;
cout<<"测试结果为:"<<endl;
while(*p!='\0')
{
memset(save,0,20);
q=0;
i=0;
while(!(isalpha(*p))&&*p!='\0')
p++;
while(isalnum(*p))
{
save[i]=*p;
i++;
p++;
}
for(j=0;j<n;j++)
if(!(strcmp(save,str3[j].c_str())))
{
a[j]++;
q=1;
break;
}
if(q==0&&*p!='\0')
{
str3[n]=save;
a[n]++;
n++;
}
}
int max=a[0];
for(i=0;i<n;i++)
if(max<a[i])
max=a[i];
for(i=0;i<n;i++)
{
if(max==a[i])
{
c[m]=i;
m++;
}
}
for(i=0;i<n;i++)
cout<<str3[i]<<"\t"<<"\t"<<"出现次数为:"<<a[i]<<endl;
cout<<"在这篇短文中出现频率最高的为:"<<endl;
for(i=0;i<m;i++)
cout<<"★★★"<<str3[c[i]]<<"★★★"<<endl;
cout<<endl<<"他们出现的次数为:"<<max<<endl;
return 0;
}
有问题再联系我。
代码如下:
#include<iostream>
#include<string>
#include<vector>
#pragma warning (disable:4786)
using namespace std;
int main()
{
int i,j,m,n,q,a[200],c[1000];
m=n=0;
char *p;
vector<string> s;
char save[20],str[200],len[10000];
string str1,str2,str3[200];
for(i=0;i<100;i++)
a[i]=0;
cout<<"请输入短文内容并以$结束:"<<endl;
while(cin)
{
cin.getline(str,200);
str1=str;
if(str1=="$")
break;
s.push_back(str1);
}
for(i=0;i<s.size();i++)
str2=str2+s[i]+" ";
str2=str2+"\0";
strcpy(len,str2.c_str ());
p=len;
cout<<"测试结果为:"<<endl;
while(*p!='\0')
{
memset(save,0,20);
q=0;
i=0;
while(!(isalpha(*p))&&*p!='\0')
p++;
while(isalnum(*p))
{
save[i]=*p;
i++;
p++;
}
for(j=0;j<n;j++)
if(!(strcmp(save,str3[j].c_str())))
{
a[j]++;
q=1;
break;
}
if(q==0&&*p!='\0')
{
str3[n]=save;
a[n]++;
n++;
}
}
int max=a[0];
for(i=0;i<n;i++)
if(max<a[i])
max=a[i];
for(i=0;i<n;i++)
{
if(max==a[i])
{
c[m]=i;
m++;
}
}
for(i=0;i<n;i++)
cout<<str3[i]<<"\t"<<"\t"<<"出现次数为:"<<a[i]<<endl;
cout<<"在这篇短文中出现频率最高的为:"<<endl;
for(i=0;i<m;i++)
cout<<"★★★"<<str3[c[i]]<<"★★★"<<endl;
cout<<endl<<"他们出现的次数为:"<<max<<endl;
return 0;
}
有问题再联系我。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
#include <iostream>
#include <map>
#include <string>
#include <iterator>
using namespace std;
main()
{
string str;
map<string,int> m;
do
{
cin>>str;
pair<map<string,int>::iterator,bool> ret=m.insert(make_pair(str,1));
if (!ret.second)
{
++ret.first->second;
}
} while (str[0]!='$'||str.size()!=1);
map<string,int>::iterator mi=m.begin(),mimax;
int fre=0;
while (mi!=m.end())
{
if (mi->first!="$")
{
if (mi->second>fre)
{
fre=mi->second;
mimax=mi;
}
}
mi++;
}
cout<<"频率最高的单词为"<<mimax->first<<"频率为"<<mimax->second;
}
#include <map>
#include <string>
#include <iterator>
using namespace std;
main()
{
string str;
map<string,int> m;
do
{
cin>>str;
pair<map<string,int>::iterator,bool> ret=m.insert(make_pair(str,1));
if (!ret.second)
{
++ret.first->second;
}
} while (str[0]!='$'||str.size()!=1);
map<string,int>::iterator mi=m.begin(),mimax;
int fre=0;
while (mi!=m.end())
{
if (mi->first!="$")
{
if (mi->second>fre)
{
fre=mi->second;
mimax=mi;
}
}
mi++;
}
cout<<"频率最高的单词为"<<mimax->first<<"频率为"<<mimax->second;
}
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询