您的位置:首页 > 其它

poj1035 Spell checker

2014-01-15 22:38 344 查看
题意:有本自定义的字典,有一些单词。查询,某个单词是否在字典中存在,如果存在,则输出“is correct”;否则,存在三种可能情况:

1。替换其中一个字母,使其在字典中存在;

2。删除其中一个字母,使其在字典中存在;

3。添加某一个字母,使其在字典中存在;

先说一句,这是我两个多月来,第一次A的一个题。至于为什么会这样,这两个多月来发生的事情我就不提了。这是一个新的开端,fighting。(其实想想自己两个多月没敲代码,我连自己都不敢相信,55555555~。他妈的,怎么这么矫情)

吐槽一下这个题,算法根本没问题,代码写的也没问题。测了很多测试数据,但一开始就是过不了。后来把单词的输出放在了replace函数中(一开始是返回字母的指针),结果就对了。搞不懂,可能有的地方没搞好。也是折腾了好久,但还是没放弃啊。嗯嗯,一开始想放弃,但最终还是A了。所以说,不要轻易放弃。额,啰嗦了,希望没人看到。不过,这也算是我新的开始,要好好搞了。

#include<iostream>
#include<cstring>
#define MAX 10100
#define N 55
using namespace std;
struct word
{
char s[16];
int len;
};
word dicy[MAX];
word chek
;
int d_num,c_num;
bool is_correct(char *p)
{
for(int j=0;j<d_num;j++)
if(strcmp(dicy[j].s,p)==0)
return true;
return false;
}
void replace(word chek,word dicy)
{
int count;
if(chek.len==dicy.len)
{
count=0;
for(int i=0;i<chek.len;i++)
if(chek.s[i]!=dicy.s[i])
count++;
if(count==1)cout<<" "<<dicy.s;
}
if(chek.len+1==dicy.len)
{
int j=0;
count=0;
for(int i=0;i<dicy.len;i++)
if(chek.s[j]!=dicy.s[i])
count++;
else
j++;
if(count==1)cout<<" "<<dicy.s;
}
if(chek.len-1==dicy.len)
{
int k=0;
count=0;

for(int i=0;i<chek.len;i++)
if(chek.s[i]!=dicy.s[k])
count++;
else
k++;
if(count==1)cout<<" "<<dicy.s;
}
}
int main()
{
char s[20];
int i,len;
i=0;
while(cin>>s)
{
if(s[0]=='#')
break;
strcpy(dicy[i].s,s);
len=strlen(s);
dicy[i].len=len;
i++;
}
d_num=i;
i=0;
while(cin>>s)
{
if(s[0]=='#')
break;
strcpy(chek[i].s,s);
len=strlen(s);
chek[i].len=len;
i++;
}
c_num=i;
for(i=0;i<c_num;i++)
{
if(is_correct(chek[i].s))
cout<<chek[i].s<<" is correct"<<endl;
else
{
cout<<chek[i].s<<":";
for(int j=0;j<d_num;j++)
replace(chek[i],dicy[j]);
cout<<endl;
}
}
return 0;
}


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