对与这道题感觉挺麻烦的,一不注意就容易WA,不过这次竟然1A了,很诧异。
这道题目主要就是字符串的处理,我从中还巩固了函数的调用,发现自己的函数调用越来越熟练了。
做法就是一个个字符串处理函数的调用,细心点,还是很简单的。
#include<stdio.h>
#include<string.h>
int nn;
struct list
{
char str[51];
}s[10000];//建立一个结构体存储字典
int change(char *x,char *y)
{
int leap=0,n,i;
n=strlen(x);
for(i=0;i<n;i++)
{
if(x[i]!=y[i])
leap++;
if(leap>1)
break;
}
if(i==n)return 1;
else
return 0;
}//这个函数是判断更改一个字母的
int shao(char *x,char *y)
{
int n,i,j;
n=strlen(x);
for(i=0,j=0;i<n;j++,i++)
{
if(x[i]!=y[j])
{
j--;
}
if((i-j)>1)
break;
}
if(i==n)return 1;
else return 0;
}//这个函数是判断少一个,或者多一个字母的
int choose(char *x,char*y)
{
int n1,n2,n;
n1=strlen(x);
n2=strlen(y);
n=(n1>n2)?n1-n2:n2-n1;
if(n>1)
return 0;
else
{
if(n==0)
{
if(change(x,y))
return 1;
else
return 0;
}
else
{
if(n1>n2)
{
if(shao(x,y))
return 1;
else
return 0;
}
else
{
if(shao(y,x))
return 1;
else
return 0;
}
}
}
}
void pan(char *x)
{
int i;
for(i=0;i<nn;i++)
{
if((strcmp(x,s[i].str)==0))
{
printf("%s is correct\n",x);
break;
}
}
if(i==nn)
{
printf("%s:",x);
for(i=0;i<nn;i++)
{
if(choose(x,s[i].str))
{
printf(" %s",s[i].str);
}
}
printf("\n");
}
}
int main()
{
int i,leap;
char str[51];
leap=1;
for(i=0;i>=0;i++)
{
gets(s[i].str);
if(s[i].str[0]=='#')
break;
}
nn=i;
for(i=0;i>=0;i++)
{
gets(str);
if(str[0]=='#')
break;
else
{
pan(str);
}
}
return 0;
}