直接来代码
#include<iostream>
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
char dir[10005][20];
int num[56][10005];
int rr[56];
char word[56][20];
int dirnum=0;
int wordnum=0;
bool re(char *a,char *b)
{
int dif=0;
while(*a)
{
if(*(a++)!=*(b++))
{
dif++;
if(dif>1)
return false;
}
}
return true;
}
bool del(char *a,char *b)
{
int dif=0;
while(*a)
{
if(*a!=*b)
{
a++;
dif++;
if(dif>1)
return false;
}
else
{
a++;
b++;
}
}
return true;
}
bool inser(char *a,char *b)
{
int dif=0;
while(*b)
{
if(*a!=*b)
{
b++;
dif++;
if(dif>1)
return false;
}
else
{
a++;
b++;
}
}
return true;
}
int main()
{
memset(rr,0,sizeof(rr));
int i=0;
while(gets(dir[i]))
{
//printf("%s\n",dir[i]);
if(dir[i][0]=='#')
break;
dirnum=i;
i++;
}
i=0;
while(gets(word[i]))
{
if(word[i][0]=='#')
break;
wordnum=i;
i++;
}
memset(rr,0,sizeof(rr));
for(int i=0; i<=wordnum; i++)
{
for(int j=0; j<=dirnum; j++)
{
int l1=strlen(word[i]);
int l2=strlen(dir[j]);
if(abs(l1-l2)<=1)
{
if(l1==l2)
{
if(strcmp(word[i],dir[j])==0)
{
rr[i]=-1;
break;
}
else if(re(word[i],dir[j]))
{
num[i][rr[i]++]=j;
}
}
if(l1==l2-1)
if(inser(word[i],dir[j]))
{
num[i][rr[i]++]=j;
}
if(l1==l2+1)
if(del(word[i],dir[j]))
{
num[i][rr[i]++]=j;
}
}
}
}
for(int i=0; i<=wordnum; i++)
{
if(rr[i]==-1)
{
printf("%s is correct\n",word[i]);
}
else
{
printf("%s:",word[i]);
for(int j=0; j<rr[i]; j++)
{
if(j<rr[i])
printf(" ");
int t=num[i][j];
printf("%s",dir[t]);
}
printf("\n");
}
}
}