题目大意:找出匹配词最多的句子
解体思路:用数组存放次数,然后和max进行对比
#include<cstdio>
#include<cstring>
void low(char (*str)[1700], int number) {
for(int i = 0; i < number; i++) {
int len = strlen(str[i]);
for(int j = 0; j < len; j++)
if(str[i][j] >= 'A' && str[i][j] <= 'Z')
str[i][j] = str[i][j] + 32;
}
}
int main() {
int key , line;
char key_words[25][25];
char key_line[25][1700];
char temp[25][1700];
int number[100];
int count = 1;
while(scanf("%d%d", &key, &line) != EOF) {
getchar();
int max = 0;
memset(key_words,'\0',sizeof(key_words));
memset(key_line, '\0', sizeof(key_line));
memset(temp,'\0',sizeof(temp));
memset(number,0,sizeof(number));
for(int i = 0; i < key; i++)
gets(key_words[i]);
for(int i = 0; i < line; i++) {
gets(key_line[i]);
strcpy(temp[i],key_line[i]);
}
// low(key_words, key);
low(key_line, line);
for(int i = 0; i < line; i++)
for(int j = 0; j < key; j++)
if(strstr(key_line[i],key_words[j])) {
int len1 = strlen(key_line[i]);
int len2 = strlen(key_words[j]);
for(int k = 0; k < len1; k++) {
int l = 0 ;
if(key_line[i][k] == key_words[j][0]) {
if(k != 0 && (key_line[i][k-1] >= 'a' && key_line[i][k-1] <= 'z'))
continue;
for(l = 0; l < len2; l++)
if(key_line[i][l + k] != key_words[j][l])
break;
}
if(l == len2 && (key_line[i][l + k] > 'z' || key_line[i][l + k] < 'a')) {
number[i]++;
// for(int m = 0; m < len2 - 1; m++)
// k++;
}
}
}
for(int i = 0; i < line; i++) {
max = max > number[i] ? max:number[i];
}
printf("Excuse Set #%d\n",count++ );
for(int i = 0; i < line; i++)
if(number[i] == max)
printf("%s\n", temp[i]);
printf("\n");
}
return 0;
}