#include<iostream> #include<math.h> #include<cstring> /* Input: 输入有多组。以"END"结束。 每组第一行为一个正确的单词(单词长度不超过2222)。 第二行为一个数字m(m不超过1111),表示Lux对这个单词听写了m次。 接下来m行,输入Lux写的单词。 Output: 对于每次听写,若是Lux写对了,输出"OK!",若是写错了,则需告诉Lux该怎样改正,对应三种情况的改正输出格式如下: 1:x insert c 表示在x的位置插入字母c; 2:x delete c 表示删除x位置的字母c; 3:x change c 表示x位置的字母应该改为字母c; 若是可改的位置有多个,则选择位置靠前的改法。(具体见样例输出。)记得给每个输出编上序号哦,序号1-m; */ using namespace std; int main() { char a[2222]; int m,i; int k=0; while(scanf("%s",a)){ if(strcmp(a,"END")==0){ break; } cin>>m; while(m--){ char b[2223]; cin>>b; k++; if(strlen(a)==strlen(b)){ for(i=0;i<strlen(a);i++){ if(a[i]!=b[i]){ printf("%d %d change %c\n",k,i+1,a[i]); break; } } if(i==strlen(b)){ printf("%d OK!\n",k); } }else if(strlen(a)>strlen(b)){ for(int i=0;i<strlen(b);i++){ if(a[i]!=b[i]){ while(i>0&&a[i]==a[i-1]){ i--; } printf("%d %d insert %c\n",k,i+1,a[i]); break; } if(i=strlen(b)){ while(i>0&&a[i]==a[i-1]){ i--; } printf("%d %d insert %c\n",k,i+1,a[i]); break; } } }else{ for(i=0;i<strlen(a);i++){ if(a[i]!=b[i]){ while(i>0&&b[i]==b[i-1]){ i--; } printf("%d %d delete %c\n",k,i+1,b[i]); break; } if(strlen(a)==i){ while(i>0&&b[i]==b[i-1]){ i--; } printf("%d %d delete %c\n",k,i+1,b[i]); break; } } } } } return 0; } |
Double click to view unformatted code.