poj 1035 (Spell checker )

找差异为一个字符的串
http://poj.org/problem?id=1035
#include<iostream>

#include<string>

#include<string.h>

#include<stdlib.h>

#include<stdio.h>

#define N 10005

using namespace std;

string str[N];

int num,l,b[N];

int  replace(string c,string b)

{

    int i,sum=0;

    for(i=0;i<c.length();i++)

    {

        if(c[i]!=b[i])

        {

            sum++;

            if(sum>1)return 0;

        }

    }

    return 1;

}

int  insert(string c,string b)

{

    int i,sum=0;

    int k=0;

    for(i=0;i<c.length();i++)//注意这里c是长度较长的

    {

        if(c[i]!=b[k])

        {

            sum++;

            k--;



            if(sum>1)return 0;

        }

        k++;

    }

    return 1;

}



int main()

{

    string c;

     num=0;

     int i,j;

    while(cin>>str[num])

    {



        if(str[num]=="#"){break;}

        num++;



    }



    getchar();

    while(cin>>c)

    {

       if(c=="#")break;

       int flag=0;

       for(i=0;i<num;i++)

       {

           if(str[i]==c)

           {

               cout<<str[i]<<" is correct"<<endl;

               flag=1;

               break;

           }

       }

       if(flag)continue;

       cout<<c<<":";

       for(i=0;i<num;i++)

       {

           if(str[i].length()==c.length())

           {

               if(replace(str[i],c))

               {

                   cout<<" "<<str[i];

               }

           }

           if(str[i].length()==c.length()+1)

           {

              

               if(insert(str[i],c))cout<<" "<<str[i];

           }

           if(str[i].length()+1==c.length())

           {

              

               if(insert(c,str[i]))cout<<" "<<str[i];

           }

       }

       cout<<"\n";



    }



}

  

你可能感兴趣的:(check)