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;
虽然这样说简单,但是我写的时候也不觉得简单,主要是我对处理字符串不会,老是少考虑情况。好像写的代码也很复杂
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; }
相关文章推荐
- POJ 1035 Spell checker (串)
- poj 1035 Spell checker ( 字符串处理 )
- poj 1035 Spell checker ( 字符串处理 )
- poj 1035 Spell checker(字符串处理)
- poj 1035--Spell checker
- POJ - 1035 Spell checker解题报告
- POJ 1035-Spell checker(字符串)
- POJ 1035 Spell checker (字符串)
- poj 1035 Spell checker【字符串】
- [ACM] POJ 1035 Spell checker (单词查找,删除替换增加任何一个字母)
- POJ-1035 Spell checker map标记
- poj 1035 Spell checker(暴力判断)
- POJ 1035 Spell checker
- POJ 1035 Spell checker 字符串
- poj 1035 Spell Checker —— 字符串
- poj_1035 Spell checker(字符串处理)
- POJ 1035 Spell checker 笔记
- POJ 1035 Spell checker(哈希表)
- poj 1035 Spell checker (锻炼自己的编码能力)
- POJ 1035 Spell checker 简单字符串匹配