【问题描述】
作为一个新的拼写检查程序开发团队的成员,您将编写一个模块,用已知的所有形式正确的词典来检查给定单词的正确性。
如果字典中没有这个词,那么可以用下列操作中的一个来替换正确的单词(从字典中):
1. 从单词中删除一个字母;
2. 用一个任意字母替换单词中的一个字母;
3. 在单词中插入一个任意字母。
你的任务是编写一个程序,为每个给定的单词找到字典中所有可能的替换。
#include<iostream>
#include<algorithm>
#include<string>
#include<sstream>
#include<vector>
#include<map>
#include<set>
#include<cmath>
using namespace std;
//maintain the element
set<string>maintain;
//store the element and make it oredered by the entry sequence
vector<string>dictionary;
bool eraseOperate(string first, string second)
{
if( abs ( int( first.size() - second.size() ) ) != 1)return false;
//make sure first size is bigger than the second
if(first.size() < second.size() )
swap(first,second);
int firstSize = first.size() ; int secondSize = second.size();
string tmp = first;
for(int i = 0 ; i < firstSize ; i ++)
{
tmp.erase(i,1);
if(tmp == second)return true;
tmp = first;
}
return false;
}
bool replaceOperate(string first,string second)
{
int firstSize = first.size() ; int secondSize = second.size();
if(firstSize != secondSize )return false;
int count = 0;
for(int i = 0 ; i < firstSize ; i++)
{
if( first[i]!= second[i] )count++;
}
return ( count == 1 );
}
int main()
{
string dict;
while(cin>>dict && dict[0] !='#')
{
dictionary.push_back(dict);
maintain.insert(dict);
}
string word;
while(cin>>word && word[0] != '#')
{
if(maintain.find(word) != maintain.end() )
{
cout<<word<<" is correct"<<endl;
}
else{
cout<<word<<": ";
for(auto& v : dictionary)
{
if(replaceOperate(v,word) || eraseOperate(v,word) )
{
cout<<v<<" ";
}
}
cout<<endl;
}
}
}