UVA - 409 Excuses, Excuses!

来源:互联网 发布:犀牛软件分割模型 编辑:程序博客网 时间:2024/06/09 07:32

UVA - 409 Excuses, Excuses!

逻辑依旧乱……

题目大意:给关键字列表和句子,输出出现关键字次数最多的句子。(大概?)不区分大小写。

解题思路:关键字存一个数组,句子存一个数组。一个字符串用来保存句子中每一个单词并全转化为小写。将这个字符串和关键字组匹配,找到就计数器++。计数器是开了一个与句子个数相同的数组,为了方便同时保存下标和关键字出现次数。输出的时候先找出最高出现次数,之后再找和其次数一样的下标。

#include<cstdio>#include<iostream>#include<cstring>#include<ctype.h>using namespace std;int main() {  int k , e , n = 0 , cal , i , j ,l , m ,max, max2;  char key[20][20] , tem[75] , exc[20][75];  int nom[20];  while(~scanf("%d%d",&k,&e)){     getchar();      n++;    for( i = 0; i < k ; i++)        cin >> key[i];    getchar();    for( i = 0; i < e ; i++) {       cin.getline( exc[i] , 75);      }    memset( nom , 0 , 20 );    for( i = 0; i < e; i++) {       max2 = 0;        for( j = 0, l = 0; j <strlen(exc[i]) ; j++ ) {           if( isalpha( exc[i][j] ) ) {                 tem[l] = exc[i][j];                 tem[l] = tolower(tem[l]);                 l++;             }           else {               tem[l] = '\0'; l = 0;              for( m = 0; m < k ; m++) {                 if(!strcmp( tem , key[m])) max2++;               }              nom[i] = max2;            }         }     }    max = nom[0];cal = 0;    for( m = 0; m < e ; m++ ) {       if( nom[m] > max ) {max = nom[m]; cal = m;  }            }    cout<<"Excuse Set #"<< n << endl << exc[cal]<< endl;    for( m = 0 ; m < e ; m++ )      if( nom[m] == max && m != cal)  cout << exc[m]<< endl;    cout << endl;   }  return 0;}
0 0