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

    }

}

  

原文地址:https://www.cnblogs.com/acSzz/p/2388336.html