百练 1035:拼写检查

描述
现在有一些英语单词需要做拼写检查,你的工具是一本词典。需要检查的单词,有的是词典中的单词,有的与词典中的单词相似,你的任务是发现这两种情况。单词A与单词B相似的情况有三种:
1、删除单词A的一个字母后得到单词B;
2、用任意一个字母替换单词A的一个字母后得到单词B;
3、在单词A的任意位置增加一个字母后得到单词B。
你的任务是发现词典中与给定单词相同或相似的单词。


输入第一部分是词典中的单词,从第一行开始每行一个单词,以"#"结束。词典中的单词保证不重复,最多有10000个。
第二部分是需要查询的单词,每行一个,以"#"结束。最多有50个需要查询的单词。
词典中的单词和需要查询的单词均由小写字母组成,最多包含15个字符。输出按照输入的顺序,为每个需要检查的单词输出一行。如果需要检查的单词出现在词典中,输出“?x is correct",?x代表需要检查的单词。如果需要检查的单词没有出现在词典中,则输出"?x: ?x1 ?x2 ...?xn",其中?x代表需要检查的单词,?x1...?xn代表词典中与需要检查的单词相似的单词,这些单词中间以空格隔开。如果没有相似的单词,输出"?x:"即可。样例输入
i
is
has
have
be
my
more
contest
me
too
if
award
#
me
aware
m
contest
hav
oo
or
i
fi
mre
#
样例输出
me is correct
aware: award
m: i my me
contest is correct
hav: has have
oo: too
or:
i is correct
fi: i
mre: more me

代码:

#include <iostream>
#include <string>
#include <vector>
using namespace std;
int main()
{
	vector<string> dict;
	string str;
	cin>>str;
	while(str != "#")
	{
		dict.push_back(str);
		cin>>str;
	}
	string str1;
	cin>>str1;
	while(str1 != "#")
	{
		bool find = false;
		for(int i = 0; i < dict.size(); i++)
		{
			if(dict[i] == str1)
			{
				find = true;
				cout<<str1<<" is correct"<<endl;
			}
		}
		if(!find)
		{
			cout<<str1<<":";
		    for(int i = 0; i < dict.size(); i++)
		    {
			    if(str1.size() + 1 == dict[i].size())
			   {
				   int j,k;
				   for(j = 0,k = 0; dict[i][j] == str1[k] && j < dict[i].size() && k < str1.size(); j++,k++);
			       for(j = j + 1;dict[i][j] == str1[k] && j < dict[i].size() && k < str1.size(); j++,k++);
				   if(j == dict[i].size() && k == str1.size())
					  cout<<" "<<dict[i];
			    }
			    if(str1.size() - 1 == dict[i].size())
			    {
			    	int j,k;
			    	for(j = 0,k = 0; dict[i][j] == str1[k] && j < dict[i].size() && k < str1.size(); j++,k++);
			    	for(k = k + 1; dict[i][j] == str1[k] && j < dict[i].size() && k < str1.size(); j++,k++);
			    	if(j == dict[i].size() && k == str1.size())
			    		cout<<" "<<dict[i];
			    }
			    if(str1.size() == dict[i].size())
			    {
			    	int j,k;
			    	for(j = 0,k = 0; dict[i][j] == str1[k] && j < dict[i].size() && k < str1.size(); j++,k++);
			    	for(j = j + 1,k = k + 1; dict[i][j] == str1[k] && j < dict[i].size() && k < str1.size(); j++,k++);
			    	if(j == dict[i].size() && k == str1.size())
			    		cout<<" "<<dict[i];
			    }
		    }
		    cout<<endl;
	    }
	    cin>>str1;
	}
	return 0;
}

猜你喜欢

转载自blog.csdn.net/hickey_chen/article/details/80290897