易错
对于多写和少写的判断,需要考虑是否有多个连续的字母
Description:
谁说大学里很轻松的?大学里英语也是要听写的有没有?Lux对此表示亚历山大。但在老师的眼里,Lux是一个很奇葩的学生,因为对于一个单词,Lux要么写对,要么错误。你们会说,这有什么奇葩的。但是Lux不一样,他犯且仅犯下列三种错误情况中的一种:
1:少写了一个字母。eg:acm 写成了 am
2:多写了一个字母。eg:acm 写成了 acmm
3:写错了一个字母。eg: acm 写成了 abm
现在,对于一个单词,Lux希望你能告诉他,他是写对了,还是写错了。若是写错了,请告诉他该怎么改。
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;
Sample Input:
acm
4
am
acmm
abm
acm
END
Sample Output:
1 2 insert c
2 3 delete m
3 2 change c
4 OK!
#include<iostream>
#include<string>
using namespace std;
/**
* kkmd66
* @return
*/
int main() {
string str;
while (cin >> str && str != "END") {
int n;
cin >> n;
int flag = 1;
//n次听写
while (n--) {
string str2;
cin >> str2;
//若两字符串一样长
if (str.size() == str2.size()) {
int i;
for (i = 0; i < str.size(); i++) {
if (str[i] != str2[i]) {
cout << flag << " " << i + 1 << " change " << str[i] << endl;
flag++;
break;
}
}
//找到最后,没问题
if (i == str.size()) {
cout << flag << " OK!" << endl;
flag++;
}
}
//听写少了
else if (str.size() > str2.size()) {
for (int i = 0; i < str.size(); i++) {
if (str[i] != str2[i]) {
//可能出现ammm听写为amm的情况,要在最前面修改
if (str[i] == str2[i - 1]) {
while (str[i] == str2[i - 1])
i--;
}
cout << flag << " " << i + 1 << " insert " << str[i] << endl;
flag++;
break;
}
}
}
//听写多了
else {
for (int i = 0; i < str2.size(); i++) {
if (str[i] != str2[i]) {
//如果出现amm听写为ammm的情况
if (str2[i] == str2[i - 1]) {
while (str2[i] == str2[i - 1]) {
i--;
}
}
cout << flag << " " << i + 1 << " delete " << str2[i] << endl;
flag++;
break;
}
}
}
}
}
return 0;
}