給定K個關鍵字,和E個句字,分析每個句字含有多少個關鍵字,將關鍵字最多的句字輸出,如果有多個數量相同的句字,則全部都要輸出。
想法:
將句子不是英文字母的字去掉,一個單字一個單字比對。本題輸出的時候包含最後一個Case都要有個空行。
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <cstdio> | |
using namespace std; | |
int K,E; | |
char keyword[20][100],line[20][1000]; | |
int analysis (int x) | |
{ | |
int num = 0, p = 0; | |
char word[100]; | |
while (1){ | |
while (line[x][p]<'A' || line[x][p]>'Z' && line[x][p]<'a' || line[x][p]>'z') { | |
if (line[x][p] == '\0') break; | |
p++; | |
} | |
if (line[x][p] == '\0') break; | |
int i; | |
for (i=0; line[x][p]>='A'&&line[x][p]<='Z'||line[x][p]>='a'&&line[x][p]<='z'; i++) | |
word[i] = line[x][p++]; | |
word[i] = '\0'; | |
for (int i=0; i<K; i++){ | |
int j=0,k=0; | |
for (; word[j] && keyword[i][k]; j++){ | |
if (word[j]==keyword[i][k] || word[j]==keyword[i][k]-32) k++; | |
} | |
if (keyword[i][k]=='\0' && word[j]=='\0') num++; | |
} | |
} | |
return num; | |
} | |
int main() | |
{ | |
freopen ("input.txt","rt",stdin); | |
int Case = 1; | |
while (scanf("%d%d",&K,&E)!=EOF) | |
{ | |
for (int i=0; i<K; i++) scanf("%s",keyword[i]); | |
getchar(); | |
int num[20],Max = 0; | |
for (int i=0; i<E; i++){ | |
gets(line[i]); | |
num[i] = analysis(i); | |
if (num[i] > Max) Max = num[i]; | |
} | |
printf("Excuse Set #%d\n",Case++); | |
for (int i=0; i<E; i++) | |
if (num[i] == Max) | |
puts(line[i]); | |
printf("\n"); | |
} | |
return 0; | |
} |
沒有留言:
張貼留言