POJ-1035 Spell checker

原创 2018年04月16日 23:33:42

Description

You, as a member of a development team for a new spell checking program, are to write a module that will check the correctness of given words using a known dictionary of all correct words in all their forms. 
If the word is absent in the dictionary then it can be replaced by correct words (from the dictionary) that can be obtained by one of the following operations: 
?deleting of one letter from the word; 
?replacing of one letter in the word with an arbitrary letter; 
?inserting of one arbitrary letter into the word. 
Your task is to write the program that will find all possible replacements from the dictionary for every given word. 

Input

The first part of the input file contains all words from the dictionary. Each word occupies its own line. This part is finished by the single character '#' on a separate line. All words are different. There will be at most 10000 words in the dictionary. 
The next part of the file contains all words that are to be checked. Each word occupies its own line. This part is also finished by the single character '#' on a separate line. There will be at most 50 words that are to be checked. 
All words in the input file (words from the dictionary and words to be checked) consist only of small alphabetic characters and each one contains 15 characters at most. 

Output

Write to the output file exactly one line for every checked word in the order of their appearance in the second part of the input file. If the word is correct (i.e. it exists in the dictionary) write the message: " is correct". If the word is not correct then write this word first, then write the character ':' (colon), and after a single space write all its possible replacements, separated by spaces. The replacements should be written in the order of their appearance in the dictionary (in the first part of the input file). If there are no replacements for this word then the line feed should immediately follow the colon.

Sample Input

i
is
has
have
be
my
more
contest
me
too
if
award
#
me
aware
m
contest
hav
oo
or
i
fi
mre
#

Sample Output

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

题意就是给你一个字典,再给你一些字符,首先如果字典中有这个字符串,则直接输出,如果没有的话,那就找字符串加一个字符或少一个字符或者换一个字符是否可以在字典中找到相应的字符串

 

解题思路:我是用string类型的,比较方便看两个字符串是否相等,用char的话,就是strcmp函数也行。

如果找不到相等的,那么久分别在字典中找到与这个字符串的长度相差1的或者相等的。

然后匹配,如果匹配的结果相差一个则输出

 

#include<iostream>
#include<string>
#include<cmath>
using namespace std;
string s[10000];
string t[10000];
int main()
{
	int k = 0;
	int p = 0;
	int d;
	while (cin >> s[k] && s[k][0] != '#')
	{
		k++;
	}
	while (cin >> t[p] && t[p][0] != '#')
	{
		bool sign = false;
		for (int i = 0; i < k; i++)
		{
			if (t[p] == s[i])
			{
				sign = true;
				break;
			}
		}
		if (sign)
		{
			cout << t[p] << " is correct" << endl;
			continue;
		}
		cout << t[p] << ":";
		for (int i = 0; i < k; i++)
		{
			int len1 = s[i].size();
			int len2 = t[p].size();
			if (abs(len1-len2) <= 1)
			{
				if (len2==1&& abs(len1 - len2) == 0)
				{
					cout << " " << s[i];
				}
				else
				{
					if (len1> len2)
					{
						int ans = 0;
						d = 0;
						for (int j = 0; j < len1; j++)
						{
							if (s[i][j] == t[p][d])
							{
								d++;
								ans++;
							}
						}
						if (ans == len2)
							cout << " " << s[i];
					}
					else
					{
						int ans = 0;
						d = 0;
						for (int j = 0; j < len2; j++)
						{
							if (s[i][d] == t[p][j])
							{
								d++;
								ans++;
							}
						}
						if (ans == len1)
							cout << " " << s[i];
					}
					if (len1 == len2)
					{
						int ts = 0;
						for (int j = 0; j < len2; j++)
						{
							if (s[i][j] != t[p][j])
							{
								ts++;
								if (ts > 1)
									break;
							}
						}
						if (ts <= 1)
							cout << " " << s[i];
					}
				}
			}
		}
		cout << endl;
		p++;
	}
	return 0;
}


poj-1035 Spell checker

Description You, as a member of a development team for a new spell checking program, are to write a ...
  • chAngE_AC
  • chAngE_AC
  • 2015-08-10 19:04:03
  • 237

POJ 1035 Spell checker【字符串暴力处理】

Spell checker Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 24311   ...
  • liuke19950717
  • liuke19950717
  • 2016-07-27 22:08:24
  • 312

POJ1035 Spell-checker(哈希,串处理)

本文出自:http://blog.csdn.net/svitter 题意: 检查字典。 一开始,输入字典中的字符,以#结束。 随后,输入查询的字符,以#结束。 其中,符合要求的查询项目有: 1.去...
  • svitter
  • svitter
  • 2014-07-29 17:43:39
  • 1057

记录frameworks SpellChecker从IME端获取单词提示的过程

部分调用栈信息: 01-01 04:59:23.234 W/System.err( 930): java.lang.Throwable: stack dump 01-01 04:59:23.235...
  • thinkinwm
  • thinkinwm
  • 2014-09-03 15:57:26
  • 1680

[POJ_1035]Spell checker

[POJ_1035][Spell checker] 单词拼写检查
  • saberhao
  • saberhao
  • 2015-06-26 15:02:30
  • 366

字符串 模拟 Spell checker (poj 1035)

给出一个字典,再给出若干单词,根据字典判断单词的正确性,若正确输出correct,若错误且它能够通过插入一个字母,删除一个字母,替换一个字母使它正确,输出更改后的单词,并按照给出字典的字典序输出。...
  • u014422052
  • u014422052
  • 2014-09-22 20:42:13
  • 742

POJ 1035 Spell checker(字符串处理)

Spell checker Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 20082   ...
  • u014361775
  • u014361775
  • 2015-01-27 11:01:43
  • 365

POJ1035 Spell checker 字符串模拟

题目大意:先输入一个词典(以#号结束),词典中的每个词条为一个字符串,然后有不定次询问(询问也以#号结束),每次询问是给出一个字符串c,问你在不在词典中,如果在,输出“c is correct”;如果...
  • AC_Gibson
  • AC_Gibson
  • 2015-04-20 16:14:02
  • 392

Spell checker

Spell checker 时间限制:1000 ms  |  内存限制:65535 KB 难度:2 描述You, as a member of a development t...
  • u012629369
  • u012629369
  • 2014-10-26 17:55:20
  • 304

POJ1035-Spell checker

  • 2011年07月31日 00:00
  • 8KB
  • 下载
收藏助手
不良信息举报
您举报文章:POJ-1035 Spell checker
举报原因:
原因补充:

(最多只允许输入30个字)