poj 1035
题意:给定一个字典 然后在给定一系列字符串 问在字典中是否能找到此字符串 或者是否存在 删除 增加 改变 一个字符 使之成为相同的字符串
思路:暴力 模拟
改了几遍
1 #include<iostream> 2 #include<cstring> 3 #include<stdio.h> 4 using namespace std; 5 char map[11111][22]; 6 int main() 7 { 8 9 int f=0; 10 int sum; 11 int l,lm; 12 char sm[22]; 13 int i,j,k,q; 14 int n=0; 15 // string s; 16 while(scanf("%s",map[n++])!=EOF) 17 { 18 l=strlen(map[n-1]); 19 if(l==1&&map[n-1][0]=='#') 20 break; 21 }; 22 n--; 23 while(scanf("%s",sm)!=EOF) 24 { 25 f=0; 26 l=strlen(sm); 27 if(l==1&&sm[0]=='#') 28 break; 29 for(i=0;i<n;i++) 30 { 31 if(strcmp(sm,map[i])==0) 32 { 33 printf("%s is correct\n",sm); 34 break; 35 } 36 } 37 if(i<n) continue; 38 39 for(i=0;i<n;i++) 40 { 41 lm=strlen(map[i]); 42 sum=0; 43 if(l==lm)// 寻找相差一个字符的 44 { 45 for(j=0;j<l;j++) 46 if(sm[j]!=map[i][j]) 47 sum++; 48 } 49 if(sum==1) 50 { 51 if(f==0) 52 { 53 f=1; 54 printf("%s:",sm); 55 } 56 printf(" %s",map[i]); 57 } 58 sum=0; 59 int q; 60 if(lm+1==l)//字典中的字符串比匹配的字符串小一个 61 { 62 for(k=0;k<l;k++) 63 { 64 for(j=0,q=0;j<l;j++) 65 { 66 if(j==k) continue; 67 if(sm[j]!=map[i][q]) 68 break; 69 q++; 70 } 71 if(j>=l) 72 { 73 if(f==0) 74 { 75 f=1; 76 printf("%s:",sm); 77 } 78 printf(" %s",map[i]); 79 break; 80 } 81 } 82 } 83 if(lm-1==l)//字典中的字符串比此个字符串大一个 84 { 85 86 for(k=0;k<lm;k++) 87 { 88 for(j=0,q=0;j<lm;j++) 89 { 90 if(j==k) continue; 91 if(map[i][j]!=sm[q]) 92 break; 93 q++; 94 } 95 if(j>=lm) 96 { 97 if(f==0) 98 { 99 f=1; 100 printf("%s:",sm); 101 } 102 printf(" %s",map[i]); 103 break; 104 } 105 } 106 } 107 } 108 if(f==0) 109 { 110 printf("%s:\n",sm); 111 continue; 112 } 113 printf("\n"); 114 } 115 return 0; 116 }