您的位置:首页 > 其它

POJ-1035-Spell checker

2012-04-18 00:06 393 查看
对与这道题感觉挺麻烦的,一不注意就容易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;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: