wa的原因是数组太小了
#include<stdio.h>
#include<string.h>
#include<ctype.h>
#include<stdlib.h>
char ignores[100][100];
char keybords[1000][100];
char title[505][1000];
char words[100];
int cmp(const void*_a,const void*_b)
{
char *a=(char*)_a;
char *b=(char*)_b;
return strcmp(a,b);
}
int getword(int tin,int i,int l,int n)
{
int t=0;
while(!isalpha(title[tin][i])&&i<l)
i++;
keybords[n][0]='\0';
while(isalpha(title[tin][i])&&i<l)
{
title[tin][i]=tolower(title[tin][i]);
keybords[n][t++]=title[tin][i];
i++;
}
keybords[n][t]='\0';
return i;
}
int getwords(int j,int k,int l)
{
int t=0;
while(!isalpha(title[j][k])&&k<l)
k++;
words[0]='\0';
while(isalpha(title[j][k])&&k<l)
{
words[t++]=toupper(title[j][k]);
k++;
}
words[t]='\0';
return k;
}
int main()
{
char *p,c;
int found,i,j,k,l,lk,lp,ign=0,tin=0,n=0;
#ifdef LOCAL
freopen("in.txt", "r", stdin);
freopen("out.txt", "w", stdout);
#endif
while(gets(ignores[ign])&&strcmp(ignores[ign],"::")!=0)
ign++;
while(gets(title[tin]))
{
l=strlen(title[tin]);
for(i=0;i<l;)
{
i=getword(tin,i,l,n);
found=0;
for(j=0;j<ign;j++)
if(strcmp(keybords[n],ignores[j])==0)
{
found=1;
break;
}
if(found)
continue;
for(j=0;j<n;j++)
if(strcmp(keybords[n],keybords[j])==0)
{
found=1;
break;
}
if(!found)
n++;
}
tin++;
}
qsort(keybords,n,sizeof(keybords[0]),cmp);
for(i=0;i<n;i++)
{
lk=strlen(keybords[i]);
for(j=0;j<lk;j++)
keybords[i][j]=toupper(keybords[i][j]);
for(j=0;j<tin;j++)
{
l=strlen(title[j]);
for(k=0;k<l;)
{
k=getwords(j,k,l);
if(strcmp(keybords[i],words)==0)
{
p=&title[j][k];
lp=strlen(p);
c=title[j][l-lp-lk];
title[j][l-lp-lk]='\0';
printf("%s%s%s\n",title[j],keybords[i],p);
title[j][l-lp-lk]=c;
}
}
}
}
return 0;
}