zoukankan      html  css  js  c++  java
  • poj 1035 Spell checker

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

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

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

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

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

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

      1 #include<stdio.h>
    2 #include<string.h>
    3 #include<iostream>
    4 #include<algorithm>
    5 using namespace std;
    6 struct node
    7 {
    8 int len;
    9 char str[20];
    10 }a[10020];
    11 int cmp(node a,node b)
    12 {
    13 return a.len<b.len;
    14 }
    15 int main()
    16 {
    17 int i,j,k;
    18 i=0;
    19 while(cin>>a[i].str,strcmp(a[i].str,"#"))
    20 {
    21 a[i].len=strlen(a[i].str);
    22 i++;
    23 }
    24 //sort(a,a+i,cmp);
    25 char sbr[20];
    26 cin>>sbr;
    27 while(strcmp(sbr,"#"))
    28 {
    29 int sum,mark=0;
    30 sum=0;
    31 int len1=strlen(sbr);
    32 for(j=0;j<i;j++)
    33 {
    34 if(!strcmp(sbr,a[j].str))
    35 {
    36 mark=1;
    37 cout<<sbr<<" is correct";
    38 break;
    39 }
    40 }
    41 if(!mark)
    42 {for(j=0;j<i;j++)
    43 {
    44 //if(a[j].len-len1>1)break;
    45 sum=0;
    46 if(len1==a[j].len)
    47 {
    48 for(k=0;k<len1;k++)
    49 if(a[j].str[k]!=sbr[k]) sum++;
    50 //if(!sum) {cout<<sbr<<" is correct";mark=1;break;}
    51 if(sum==1)
    52 {
    53 if(!mark)
    54 {
    55 mark=1;
    56 cout<<sbr<<": "<<a[j].str;
    57 }
    58 else cout<<" "<<a[j].str;
    59 }
    60 }
    61 sum=0;
    62 if(len1-a[j].len==1)
    63 {
    64 for(k=0;k<len1;k++)
    65 if(sbr[k]!=a[j].str[k]) break;
    66 for(k=k+1;k<len1;k++)
    67 if(sbr[k]!=a[j].str[k-1]) {sum=1;break;}
    68 if(!sum)
    69 {
    70 if(!mark)
    71 {
    72 mark=1;
    73 cout<<sbr<<": "<<a[j].str;
    74 }
    75 else cout<<" "<<a[j].str;
    76 }
    77 }
    78 if(a[j].len-len1==1)
    79 {
    80 for(k=0;k<a[j].len;k++)
    81 if(sbr[k]!=a[j].str[k]) break;
    82 for(k=k+1;k<a[j].len;k++)
    83 if(sbr[k-1]!=a[j].str[k]){sum=1;break;}
    84 if(!sum)
    85 {
    86 if(!mark)
    87 {
    88 mark=1;
    89 cout<<sbr<<": "<<a[j].str;
    90 }
    91 else cout<<" "<<a[j].str;
    92 }
    93 }
    94 }
    95 }
    96 if(!mark) {cout<<sbr<<":";}
    97 cout<<endl;
    98 cin>>sbr;
    99 }
    100 return 0;
    101 }
  • 相关阅读:
    oracle11g新建表空间和用户
    ORACLE查询数据中所存在的表,搜索指定的表
    QTP的那些事vbs通用操作数据库函数整理
    Oracle:PL/SQL 中如何使用Array
    QTP的那些事—QTP11+QC11框架整理源码(个人原创)
    QTP的那些事灵活运用其中的datatable对象
    QTP的那些事共享对象库的使用
    zoj 1092 Arbitrage (poj 2240)
    zoj 1655 Transport Goods
    UVA 11292 Dragon of Loowater
  • 原文地址:https://www.cnblogs.com/fxh19911107/p/2380907.html
Copyright © 2011-2022 走看看