//需要考虑的情况比较多,要一步一步地进行模拟,要小心其值是取哪一个字符串的长度!
#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");
}
poj 1035 Spell checker
最新推荐文章于 2024-09-26 21:10:57 发布