123 - Searching Quickly

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;
}

你可能感兴趣的:(search)