也是根据题意来模拟就行了。
思路是从给的字符串入手,一个一个比对关键字。
有个debug的地方。交完题RE。
是:for (int i = 0; s[i] != '\0'; i++)//debug
开始时用的是 s[i] != '\n'。
大概是'\n'被getchar吃掉了,程序无法结束。
代码:
#include <stdio.h>
#include <string.h>
const int Maxn = 25;
char key[Maxn][Maxn], exc[Maxn][75];
int coutkey(char s[], int k)
{
int res = 0;
int m = 0;
char tmp[75];
for (int i = 0; s[i] != '\0'; i++)//debug
{
if (s[i] >= 'A' && s[i] <= 'Z')
tmp[m++] = s[i] + 32;
else if (s[i] >= 'a' && s[i] <= 'z')
tmp[m++] = s[i];
else
{
tmp[m] = '\0';
m = 0;
for (int j = 0; j < k; j++)
{
if(strcmp(tmp, key[j]) == 0)
res++;
}
}
}
return res;
}
int main()
{
#ifdef LOCAL
freopen("in.txt", "r", stdin);
#endif // LOCAL
int n[Maxn], k, e, num = 1, max;
while (scanf("%d%d", &k, &e) == 2)
{
max = 0;
getchar();
for (int i = 0; i < k; i++)
{
scanf("%s", &key[i]);
}
getchar();
for (int i = 0; i < e; i++)
{
fgets(exc[i], 75, stdin);
}
for (int i = 0; i < e; i++)
{
n[i] = coutkey(exc[i], k);
if (max < n[i])
max = n[i];
}
printf("Excuse Set #%d\n", num++);
for (int i = 0; i < e; i++)
{
if(n[i] == max)
{
printf("%s", exc[i]);
}
}
printf("\n");
}
return 0;
}