【模拟】智能T9英文输入法

原创 2012年10月06日 21:24:14

智能T9英文输入法

(phone.pas/in/out)

Problem

某款新型手机为了方便用户,希望开发一种新的英文输入法.要求在输入英文的时候输入法不但能够做到自动联想,还能进行自动纠错.譬如用户希望输入hello这个单词,他应该输入43556,但是他不小心输入了46556.输入法发现词库中找不到任何匹配的单词, 于是尝试把6纠正为3,这便是纠错功能.现在需要你来开发这个输入法的核心部分. 给出词库和用户的输入,请你依次给出适合的单词.

2 A B C

3 D E F

4 G H I

5 J K L

6 M N O

7 P Q R S

8 T U V

9 W X Y Z

注意:1和0没有对应的字母,但是1和0也有可能出现.

Input

数据第一行是一个整数n(1<=n<=100),表示词库中的单词个数.

接下来n行每行是一个词库中的单词.单词只包含大写字母,长度不会超过10.不会出现两个相同的单词.

最后一行是一个数字串表示用户的输入.输入的长度不会超过10.

Output

测试数据的输出,包含四个部分.

首先输出完全符合输入的单词.

然后是根据联想得到的单词,即前缀部分完全符合输入的单词.

接下来输出纠正一个按键之后完全符合输入的单词.

然后是纠正一个按键之后联想得到的单词.

每部分如果有多个匹配,则按字典顺序输出.

保证不会出现无解情况.

Sample Input

6

BVUJMEE

MUTKOE

BTVLOE

ATVKEI

EVTJNJHF

OVVLMFAABC

288563

Sample Output

BTVLOE

BVUJMEE

MUTKOE

OVVLMFAABC



必须拿分的水题,因为我错了,排名自然就下去了。

只是题目意思没搞懂。不一定要先完全匹配,才来联想。即使找不到完全匹配,也要联想。

其余处理很简单。


#include <cstdio>
#include <cstdlib>

char str[110][20];
char src[20];
char str0[110][20];

long hash[26] = {2,2,2,3,3,3,4,4,4,5,5,5,6,6,6,7,7,7,7,8,8,8,9,9,9,9};

inline void unmap(char& a)
{
	a = hash[a-'A'];
}

int cmpr(const void* aa,const void* bb)
{
	char* a = (char*) aa;
	char* b = (char*) bb;
	long l = a[0];
	if (b[0] < l)
		l = b[0];
	for (long i=1;i<l+1;i++)
	{
		if (a[i] < b[i])
			return -1;
		if (a[i] > b[i])
			return 1;
	}
	if (a[0] < b[0])
		return -1;
	if (a[0] > b[0])
		return 1;
	return 0;
}

int cmpr2(const char* a,const char* b)
{
	long l = a[0];
	if (b[0] < l)
		l = b[0];
	for (long i=1;i<l+1;i++)
	{
		if (a[i] < b[i])
			return -1;
		if (a[i] > b[i])
			return 1;
	}
	return 0;
}

bool cmpr3(const char* a,const char* b)
{
	long cnt = 0;
	long l = a[0];
	if (b[0] < l)
		l = b[0];
	for (long i=1;i<l+1;i++)
	{
		if (a[i] != b[i])
		{
			cnt ++;
			if (cnt == 2)
				return false;
		}
	}
	return cnt == 1;
}

int main()
{
	freopen("phone.in","r",stdin);
	freopen("phone.out","w",stdout);
	long n;
	scanf("%ld",&n);
	for (long i=1;i<n+1;i++)
	{
		scanf("%s",str0[i]+1);
		while (str0[i][++str0[i][0]]);str0[i][0]--;
	}
	qsort(str0+1,n,sizeof str0[0],cmpr);
	for (long i=1;i<n+1;i++)
	{
		for (long j=1;j<str0[i][0]+1;j++)
			str[i][j] = hash[str0[i][j]-'A'];
		str[i][0] = str0[i][0];
	}

	scanf("%s",src+1);
	while (src[++src[0]])
		src[src[0]] -= '0';
	src[0]--;


	for (long i=1;i<n+1;i++)
	{
		if (cmpr(str[i],src)==0)
		{
			printf("%s\n",str0[i]+1);
		}
	}
	for (long j=1;j<n+1;++j)
	{
		if (cmpr2(str[j],src)==0 && str[j][0]!=src[0])
		{
			printf("%s\n",str0[j]+1);
		}
	}
	for (long i=1;i<n+1;i++)
	{
		if (cmpr3(str[i],src) && str[i][0]==src[0])
		{
			printf("%s\n",str0[i]+1);
		}
	}
	for (long j=1;j<n+1;++j)
	{
		if (cmpr3(str[j],src) && str[j][0]!=src[0])
		{
			printf("%s\n",str0[j]+1);
		}
	}
	return 0;
}



用lisp在emacs org table中进行电子表格计算

一句话,绝对不比excel计算功能弱,当然图形方面是没有的。对于编程者来讲,用鼠标拖拽操作还是用lisp编写计算公式哪个更符合思考的习惯,我觉得是后者。我这里只介绍lisp计算公式,如果关注简单的Ca...

Triivi 智能英文输入法

  • 2008年06月10日 21:56
  • 7.85MB
  • 下载

Triivi 智能英文输入法 V0.98

  • 2007年01月22日 14:48
  • 6.75MB
  • 下载

poj 1451 T9 【字典树 + DFS 模拟智能英语输入法】

T9 Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 3560   Accepted: 1...

智能英文输入法Triivi

  • 2006年09月09日 10:07
  • 6.15MB
  • 下载

Win7系统英文输入法不见了找回的方法

很多用户切换输入法,都会选择将常用的输入法设置为默认,而原有的英文状态输入法,则可能被删除,最近一些win7的用户反馈说Win7系统英文输入法不见了;不知道怎么找回?下面小编就为大家带来Win7系统英...

WPF 密码框输入密码时强制使用英文输入法

最近项目遇到这个问题,网上搜了半天,也没有好的解决方案,哥怒了!于是自己想了个笨办法: 在登录密码框登录时,只能按英文输入法输入,强制密码框使用英文输入法: 思路是:在密码框的键盘焦点事件和键盘输...
  • haylhf
  • haylhf
  • 2012年08月21日 11:22
  • 4372

SDL游戏之路(十五)--英文输入法

英文输入法 前面已经创建好了模拟键盘。那么在按钮点击上添加事件。就可以实现英文输入法了。 绘制一个白色的矩形框为输入框,在上面添加一个红色闪动光标。 头文件: #ifndef SKVIEWINPUT_...
  • ycg01
  • ycg01
  • 2014年01月18日 10:35
  • 968

完成输入框自动切换对应的中文或英文输入法

CSS文本框输入法自动切换2009-12-26 11:34 第一个是不显示输入法,即用键盘也不能切换输入法。 第二个是自动切换成英文的输入法,但还可以用键盘切...

英文输入法InputHelpSetup2012.05.06012

  • 2012年07月17日 23:31
  • 15.01MB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:【模拟】智能T9英文输入法
举报原因:
原因补充:

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