#include<stdio.h>
#include<string.h>
void proccess(char lib[][16],char toCheck[][16],int *libLen,int *toCheckLen);
int CmpString(int type,char check[],char lib[],int *answerCount,int *answerIndex,int _j);
void showAnswer(int answerCorrect,int answerCount,int *answerIndex,char lib[][16],char *check);
void showAnswer(int answerCorrect,int answerCount,int *answerIndex,char lib[][16],char *check)
{
int i;
if(answerCorrect >= 0)
printf("%s is correct",lib[answerCorrect]);
else
{
printf("%s:",check);
for(i=0; i<answerCount; i++)
{
printf(" %s",lib[answerIndex[i]]);
}
}
}
int CmpString(int type,char check[],char lib[],int *answerCount,int *answerIndex,int _j)
{
int i,j;//当前字符串比较标志
int once = 0;//记录不相符的个数
switch (type)
{
case -1:
{
//比较思想:check中全部在lib中得到
for(i=0,j=0; check[i] ;)
{
if(check[i] == lib[j])
{
i++;
j++;
}
else
{
j++;
once++;
}
}
if(once==1 || !once)
{
answerIndex[(*answerCount)++] = _j;
}
}
break;
case 0:
{
for(i=0,j=0; check[i];)
{
if(check[i] == lib[j])
i++,j++;
else
{
i++;
j++;
once++;
}
}
if(once == 1)
{
answerIndex[(*answerCount)++] = _j;
}
if(!once)
{
(*answerCount)++;
return _j;
}
}
break;
case 1:
{
//insert a char
for(i=0,j=0; check[i];)
{
if(check[i] == lib[j])
i++,j++;
else
{
i++;
once++;
}
}
if(once == 1)
{
answerIndex[(*answerCount)++] = _j;
}
}
break;
}
return -1;
}
void proccess(char lib[][16],char toCheck[][16],int *libLen,int *toCheckLen)
{
int i,j;
int answerCorrect = -1;//是否有完全一样的答案(有就是在lib中的下标)
int cmpType;//比较类型
int answerCount=0;//符合标准的答案
int answerIndex[100];//符合标准答案的下标(在lib中)
for(i=0; toCheck[i][0]!='#'; i++)
{
for(j=0; lib[j][0]!='#'; j++)
{
cmpType = toCheckLen[i]-libLen[j];
if(cmpType<=1 && cmpType>=-1)
answerCorrect = CmpString(cmpType,toCheck[i],lib[j],&answerCount,answerIndex,j);
//有正确的答案就立刻停止
if(answerCorrect >= 0)
break;
}
showAnswer(answerCorrect,answerCount,answerIndex,lib,toCheck[i]);
printf("\n");
answerCount = 0;//答案计数器清零
answerCorrect = -1;
}
}
int main(void)
{
int i;
char lib[10001][16]={0};
char toCheck[51][16]={0};
int libLen[10001]={0};
int toCheckLen[51]={0};
i=0;
scanf("%s",lib[i]);
libLen[i] = strlen(lib[i]);
for(; lib[i++][0]!='#';)
{
scanf("%s",lib[i]);
libLen[i] = strlen(lib[i]);
}
i=0;
scanf("%s",toCheck[i]);
toCheckLen[i] = strlen(toCheck[i]);
for(; toCheck[i++][0]!='#';)
{
scanf("%s",toCheck[i]);
toCheckLen[i] = strlen(toCheck[i]);
}
proccess(lib,toCheck,libLen,toCheckLen);
}
#include<string.h>
void proccess(char lib[][16],char toCheck[][16],int *libLen,int *toCheckLen);
int CmpString(int type,char check[],char lib[],int *answerCount,int *answerIndex,int _j);
void showAnswer(int answerCorrect,int answerCount,int *answerIndex,char lib[][16],char *check);
void showAnswer(int answerCorrect,int answerCount,int *answerIndex,char lib[][16],char *check)
{
int i;
if(answerCorrect >= 0)
printf("%s is correct",lib[answerCorrect]);
else
{
printf("%s:",check);
for(i=0; i<answerCount; i++)
{
printf(" %s",lib[answerIndex[i]]);
}
}
}
int CmpString(int type,char check[],char lib[],int *answerCount,int *answerIndex,int _j)
{
int i,j;//当前字符串比较标志
int once = 0;//记录不相符的个数
switch (type)
{
case -1:
{
//比较思想:check中全部在lib中得到
for(i=0,j=0; check[i] ;)
{
if(check[i] == lib[j])
{
i++;
j++;
}
else
{
j++;
once++;
}
}
if(once==1 || !once)
{
answerIndex[(*answerCount)++] = _j;
}
}
break;
case 0:
{
for(i=0,j=0; check[i];)
{
if(check[i] == lib[j])
i++,j++;
else
{
i++;
j++;
once++;
}
}
if(once == 1)
{
answerIndex[(*answerCount)++] = _j;
}
if(!once)
{
(*answerCount)++;
return _j;
}
}
break;
case 1:
{
//insert a char
for(i=0,j=0; check[i];)
{
if(check[i] == lib[j])
i++,j++;
else
{
i++;
once++;
}
}
if(once == 1)
{
answerIndex[(*answerCount)++] = _j;
}
}
break;
}
return -1;
}
void proccess(char lib[][16],char toCheck[][16],int *libLen,int *toCheckLen)
{
int i,j;
int answerCorrect = -1;//是否有完全一样的答案(有就是在lib中的下标)
int cmpType;//比较类型
int answerCount=0;//符合标准的答案
int answerIndex[100];//符合标准答案的下标(在lib中)
for(i=0; toCheck[i][0]!='#'; i++)
{
for(j=0; lib[j][0]!='#'; j++)
{
cmpType = toCheckLen[i]-libLen[j];
if(cmpType<=1 && cmpType>=-1)
answerCorrect = CmpString(cmpType,toCheck[i],lib[j],&answerCount,answerIndex,j);
//有正确的答案就立刻停止
if(answerCorrect >= 0)
break;
}
showAnswer(answerCorrect,answerCount,answerIndex,lib,toCheck[i]);
printf("\n");
answerCount = 0;//答案计数器清零
answerCorrect = -1;
}
}
int main(void)
{
int i;
char lib[10001][16]={0};
char toCheck[51][16]={0};
int libLen[10001]={0};
int toCheckLen[51]={0};
i=0;
scanf("%s",lib[i]);
libLen[i] = strlen(lib[i]);
for(; lib[i++][0]!='#';)
{
scanf("%s",lib[i]);
libLen[i] = strlen(lib[i]);
}
i=0;
scanf("%s",toCheck[i]);
toCheckLen[i] = strlen(toCheck[i]);
for(; toCheck[i++][0]!='#';)
{
scanf("%s",toCheck[i]);
toCheckLen[i] = strlen(toCheck[i]);
}
proccess(lib,toCheck,libLen,toCheckLen);
}