| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
参考写的代码,感觉比较容易理解#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <malloc.h>
char dic[10001][16];//字典中的单词
char word[51][16]; //需要检查的单词
int DicNum=0;
int WordNum=0;
int Delete(char *word,char *dic)
{
int dif=0;
while (*word)
{
if (*word!=*dic)
{
word++;
dif++;
if (dif>1)
return 0;
}
else
{
word++;
dic++;
}
}
return 1;
}
int Change(char *word,char *dic)
{
int dif=0;
while (*word)
{
if (*(word++) != *(dic++))
{
dif++;
if (dif>1)
return 0;
}
}
return 1;
}
int Insert(char *word,char *dic)
{
int dif=0;
while (*dic)
{
if (*dic!=*word)
{
dic++;
dif++;
if (dif>1)
return 0;
}
else
{
word++;
dic++;
}
}
return 1;
}
int main()
{
int i,j,k,wflag[10001];
while (scanf("%s",dic[DicNum])&&dic[DicNum][0]!='#')
DicNum++;
while (scanf("%s",word[WordNum])&&word[WordNum][0]!='#')
WordNum++;
for (i=0;i<WordNum;i++)
{
//记录通过变换得到字典单词的下标
int pa=0,flag=0;
int len=strlen(word[i]),diclen;
for (k=0;k<DicNum;k++)//对于每一个单词遍历字典
{
diclen=strlen(dic[k]);
if (diclen==len)
{
if (!strcmp(word[i],dic[k]))
{ //equal
flag=1;
break;
}
else if (Change(word[i],dic[k]))
wflag[++pa]=k;
}
else if (diclen-len==1)
{
if(Insert(word[i],dic[k]))
wflag[++pa]=k;
}
else if (len-diclen==1)
{
if (Delete(word[i],dic[k]))
wflag[++pa]=k;
}
}
if(flag)
printf("%s is correct\n",word[i]);
else
{
printf("%s: ",word[i]);
for (j=1;j<=pa;j++)
printf("%s ",dic[wflag[j]]);
printf("\n");
}
}
return 0;
}
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator