//需要考虑的情况比较多,要一步一步地进行模拟,要小心其值是取哪一个字符串的长度! #include <iostream> #include <string> #include <vector> #include <algorithm> using namespace std; vector<string> v; void is_replace(string str1, string str2) { int i, len, c = 0; len = str1.length(); for (i = 0; i < len; i++){ if (str1[i] != str2[i]) c++; } if (c == 1){ cout << " " << str2; return ; } } void is_insert(string str1, string str2) { int i, len; len = str1.length(); for (i = 0; i < len; i++){ if (str1[i] != str2[i]){ string tmp; tmp = str2; tmp.insert(i, 1, str1[i]); if (tmp == str1){ cout << " " << str2; break; } } } return ; } void is_delete(string str1, string str2) { int i, len; len = str2.length(); for (i = 0; i < len; i++){ if (str1[i] != str2[i]){ string tmp; tmp = str2; tmp.erase(i, 1); if (tmp == str1){ cout << " " << str2; break; } } } return ; } int main() { int i, s, len1, len2; bool flag, flag1; string str; //字典词的输入 while (cin >> str){ if (str == "#") break; v.push_back(str); } s = v.size(); while (cin >> str){ if (str == "#") break; len1 = str.length(); flag = flag1 = false; for (i = 0; i < s; i++){ if (str == v[i]){ cout << str << " is correct"; flag1 = true; break; } } if (!flag1){ if (!flag){ cout << str << ":"; flag = true; } for (i = 0; i < s; i++){ len2 = v[i].length(); if (len1 == len2){ is_replace(str, v[i]); } else if (len1 == len2 + 1){ is_insert(str, v[i]); } else if (len1 == len2 - 1){ is_delete(str, v[i]); } } } cout << endl; } system("pause"); }