您的位置:首页 > 其它

poj 1035 Spell checker

2012-03-05 20:11 344 查看
http://poj.org/problem?id=1035 题目很简单,就是给一连串的字符串作为标准字符串,然后是输入以些变动的字符串,这个变动的字符串是这样定义的:

1.可能是随意的删掉了一个字符

2.可能是随意的加上了一个字符

3.与标准字符串相比,随意的替换掉了一个字符。

由于上面的定义都是说的一个,所以题目也就很简单了,只要罗列三种情况就可以,len1(母串)和len2(子串),1.len1==len2, 2. len1-len2==1 3. len2-len1==1;

虽然这样说简单,但是我写的时候也不觉得简单,主要是我对处理字符串不会,老是少考虑情况。好像写的代码也很复杂

#include<stdio.h>
#include<string.h>
#include<iostream>
#include<algorithm>
using namespace std;
struct node
{
int len;
char str[20];
}a[10020];
int cmp(node a,node b)
{
return a.len<b.len;
}
int main()
{
int i,j,k;
i=0;
while(cin>>a[i].str,strcmp(a[i].str,"#"))
{
a[i].len=strlen(a[i].str);
i++;
}
//sort(a,a+i,cmp);
char sbr[20];
cin>>sbr;
while(strcmp(sbr,"#"))
{
int sum,mark=0;
sum=0;
int len1=strlen(sbr);
for(j=0;j<i;j++)
{
if(!strcmp(sbr,a[j].str))
{
mark=1;
cout<<sbr<<" is correct";
break;
}
}
if(!mark)
{for(j=0;j<i;j++)
{
//if(a[j].len-len1>1)break;
sum=0;
if(len1==a[j].len)
{
for(k=0;k<len1;k++)
if(a[j].str[k]!=sbr[k]) sum++;
//if(!sum) {cout<<sbr<<" is correct";mark=1;break;}
if(sum==1)
{
if(!mark)
{
mark=1;
cout<<sbr<<": "<<a[j].str;
}
else cout<<" "<<a[j].str;
}
}
sum=0;
if(len1-a[j].len==1)
{
for(k=0;k<len1;k++)
if(sbr[k]!=a[j].str[k]) break;
for(k=k+1;k<len1;k++)
if(sbr[k]!=a[j].str[k-1]) {sum=1;break;}
if(!sum)
{
if(!mark)
{
mark=1;
cout<<sbr<<": "<<a[j].str;
}
else cout<<" "<<a[j].str;
}
}
if(a[j].len-len1==1)
{
for(k=0;k<a[j].len;k++)
if(sbr[k]!=a[j].str[k]) break;
for(k=k+1;k<a[j].len;k++)
if(sbr[k-1]!=a[j].str[k]){sum=1;break;}
if(!sum)
{
if(!mark)
{
mark=1;
cout<<sbr<<": "<<a[j].str;
}
else cout<<" "<<a[j].str;
}
}
}
}
if(!mark) {cout<<sbr<<":";}
cout<<endl;
cin>>sbr;
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: