poj1035 Spell checker

来源:互联网 发布:java 字符编码转换 编辑:程序博客网 时间:2024/05/01 10:31

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

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

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

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

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

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

#include<iostream>#include<cstring>#define MAX 10100#define N 55using namespace std;struct word{  char s[16];  int len;};word dicy[MAX];word chek[N];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;}


 

0 0
原创粉丝点击