PKU 1598 Excuses, Excuses!

http://poj.org/problem?id=1598
K個のキーワードとE個の文が与えられる。E個の文の中でキーワードの出現数が最も多いものを出力しろというような問題。出現するキーワードはアルファベット以外の文字で区切られていなければならない。

string.find()の使い方に少し手間取りました。
あと、キーワードの抽出がしやすいように適当なところにスペースを入れて上手いことやろうとしました。

string in[20];
string conv[20];

string key[20];
int occ[20];

main(){
  int k,e,cc=0;
  while(cin>>k>>e){
    ++cc;
    rep(i,k){
      cin>>key[i];
      key[i]=' '+key[i]+' ';
    }
    cin.ignore();
    int maxoc=0;
    rep(i,e){
      getline(cin,in[i]);
      conv[i]="";
      rep(j,in[i].size()){
	if(isalpha(in[i][j]))conv[i]+=tolower(in[i][j]);
	else conv[i]+=' ';
      }
      conv[i]=' '+conv[i];
      conv[i]+=' ';
      occ[i]=0;
      rep(j,k){
	int pos=-1;
	while((pos=conv[i].find(key[j],pos+1))!=string::npos)++occ[i];
      }
      maxoc=max(occ[i],maxoc);
    }
    cout<<"Excuse Set #"<<cc<<endl;
    rep(i,e){
      if(occ[i]==maxoc)cout<<in[i]<<endl;
    }
    cout<<endl;
  }
}