开始用getchar()逐个输入逐个处理结果超时了。。。。。
后面改用getline输入就过了。
思路:就是对每一句话都找一遍看有多少个指定的单词,值得注意的是从
整个语句中挑出每个单词的处理
#include<iostream>
#include<cstdio>
#include<cstring>
#include<string.h>
#include<algorithm>
using namespace std;
int is_char(char x)
{
if(x>='a'&&x<='z'||x>='A'&&x<='Z')
return 1;
else
return 0;
}
int is_shuzi(char a)
{
if(a>='0'&&a<='9')
return 1;
else
return 0;
}
int main()
{
int cnt[20+1],cnt1=0;
string s1[20+1],str,s2[20+1],str1;
char ch,ch1;
int K,E,i,j,k,k1;
while(cin>>K>>E)
{
cnt1++;
for(i=0;i<K;i++)
cin>>s1[i];
getchar();
k=-1;k1=-1;
memset(cnt,0,sizeof(cnt));
while(E--)
{
k++;
k1++;
str="";
getline(cin,s2[k1]); //不能用cin.getline();
int len=s2[k1].size();
for(i=0;i<len;i++)
{ ch=s2[k1][i];
if(is_char(ch))
{
if(ch>='A'&&ch<='Z')
ch=ch+32;
str=str+ch;
}
if(str[0]>='a'&&str[0]<='z')
{
if(!is_char(ch)&&!is_shuzi(ch))//多个&&连用出错,所以写成了函数形式
{
//cout<<str<<endl;//测试语句
for(j=0;j<K;j++)
if(s1[j]==str)
cnt[k]++;
str="";
}
}
}
}
int max=0;j=0;
for(i=0;i<=k;i++)
if(max<cnt[i])
{
j=i;
max=cnt[i];
}
//cout<<s2[0]<<endl;//测试语句
//for(i=0;i<=k;i++)
//cout<<cnt[i]<<" ";
//cout<<endl;
cout<<"Excuse Set #"<<cnt1<<endl;
cout<<s2[j]<<endl;
for(i=0;i<=k;i++)
if(i!=j&&cnt[i]==max)
cout<<s2[i]<<endl;
cout<<endl;
}
return 0;
}