首页 > 代码库 > poj1035Spell checker

poj1035Spell checker

暴力解决。先把字典里的每个单词的长度存起来,在查找的时候,就比较长度,在多一个少一个之间找,

#include<stdio.h>
#include<string.h>
#include<iostream>
#include<stdlib.h>
#include<algorithm>
#include<queue>
using namespace std;
char s[10005][20];
char h[20];
int w[10005],len;
int show(int a)
{
    int i,t,k;
    int bu=0;
    t=w[a]-len;
    if(t>1)
        return 1;
    if(t==0)
    {
        for(i=0;i<w[a];i++)
        {
            if(h[i]!=s[a][i])
             {bu++;}
        }
        if(bu==1)
            return 0;
    }
    else
    {
        if(t==1)
        {
            for(i=0,k=0;i<w[a];)
            {
                if(h[k]!=s[a][i])
                 {bu++;i++;}
                 else
                 {
                     i++;k++;
                 }
            }
            if(bu==1)
              return 0;
        }
        else
            if(t==-1)
            {
                for(i=0,k=0;k<len;)
                {
                    if(h[k]!=s[a][i])
                     {bu++;k++;}
                     else
                     {
                         i++;k++;
                     }
                }
            }
            if(bu==1)
                return 0;
    }
    return 1;
}
int main()
{
    int i=0;
    while(scanf("%s",&s[i]))
    {
        if(s[i][0]=='#')
            break;
        w[i]=strlen(s[i]);
        i++;
    }
    i--;
    int j;
    while(scanf("%s",h))
    {
        if(h[0]=='#')
            break;
        printf("%s",h);
        len=strlen(h);
       // printf("%d ,%s",i,s[0]);
        for(j=0;j<=i;j++)
        {
           if(w[j]==len&&strcmp(s[j],h)==0)
            {printf(" is correct\n");
              break;}
        }
        if(j>i)
        {
            printf(":");
            for(j=0;j<=i;j++)
                if(show(j)==0)  printf(" %s",s[j]);
            printf("\n");
        }
    }
	return 0;
}