View Code of Problem 105

#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.


Back to problem 105