简单字符串题目,有一点集合的小应用
#include <stdio.h>
#include <set>
#include <string>
#include <string.h>
#include <iostream>
using namespace std;
#define EXECUSE_NUM 25
#define EXECUSE_LEN 80
#define KEY_NUM 25
#define KEY_LEN 25
char execuse[EXECUSE_NUM][EXECUSE_LEN];
int keywords_num[EXECUSE_NUM];
set<string> keywords;
int case_count;
void func(int m, int n)
{
int i, j, k;
char word[KEY_LEN];
int count;
string str;
int max;
max = -1;
for(i=0; i<n; i++)
{
count = 0;
for(j=0; j<strlen(execuse[i]); j++)
{
if(execuse[i][j]>='a'&&execuse[i][j]<='z' || execuse[i][j]>='A'&&execuse[i][j]<='Z')
{
word[count++] = execuse[i][j];
}
else
{
if(count)
{
str.assign(word, count);
for(k=0; k<str.length(); k++)
if(str.at(k)>='A' && str.at(k)<='Z')
str.at(k) += ('a'-'A');
if(keywords.find(str) != keywords.end())
keywords_num[i]++;
}
count = 0;
}
}
if(max < keywords_num[i])
max = keywords_num[i];
}
printf("Excuse Set #%d\n", case_count);
for(i=0; i<n; i++)
{
if(keywords_num[i] == max)
{
printf("%s\n", execuse[i]);
}
}
printf("\n");
}
int main(void)
{
int m, n;
int i;
string str;
char buffer[100];
case_count = 0;
while(scanf("%d %d",&m,&n) != EOF)
{
case_count ++;
gets(buffer);
keywords.clear();
for(i=0; i<m; i++)
{
gets(buffer);
str.assign(buffer, strlen(buffer));
keywords.insert(str);
}
for(i=0; i<n; i++)
{
gets(execuse[i]);
keywords_num[i] = 0;
}
func(m, n);
}
return 0;
}