poj1035

#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);
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值