【模拟】智能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;
}



T9输入法的实现

T9输入法,名字听起来陌生,可是大家却经常使用它。可以说T9输入法是输入法历史中的一次革命。至少自T9输入法开始,输入法有长足的进步。 如图手机中九个数字键。26个英文字母被分配到2至9这8个数字键...
  • li4951
  • li4951
  • 2012年03月30日 11:11
  • 4512

智能T9英文输入法

智能T9英文输入法Time Limit:1s Memory Limit:1000k Total Submit:1556 Accepted:534 下载样例程序(PE)下载样例程序(ELF) Probl...
  • Kinglliam
  • Kinglliam
  • 2006年05月12日 18:31
  • 3154

android T9 搜索联系人分析与实现(支持多音字)

最近在项目开发过程中
  • ZJQYJG
  • ZJQYJG
  • 2014年11月16日 23:02
  • 3654

T9算法

需要完整的javaT9算法的请联系我,qq:715216366 验证信息:湖北枣阳,注意哦,要收取些很小很小的费用以表共享。 T9输入法,名字听起来陌生,可是大家却经常使用它。可以说T9输入法是输...
  • hellolinshoujie
  • hellolinshoujie
  • 2012年04月19日 11:29
  • 6454

通讯录T9搜索算法实现

通讯录T9搜索算法 引言: 本人是做车机的,由于项目需要,手机与车机通过蓝牙连接后,需要在车机上实现T9键盘的通讯录搜索功能,算法实现参考了网上的一些想法,但是代码每一行都是自己写的,没有参考...
  • djcxym
  • djcxym
  • 2017年07月13日 15:39
  • 324

超强容错,智能英文输入法

1.多种输入模式设置:D模式,DN模式,DC模式,DCN模式 2.省略输入:为了达到快速输入,只需输入一个完整单词或短语的部分字符就能产生相应候选,即输入过程可以随意的省略字符,如你想输入intel...
  • guan2051
  • guan2051
  • 2012年08月01日 23:27
  • 226

T9输入法实现原理和步骤

T9输入法全名为智能输入法,字库容量九千多字,支持十多种语言,是由美国特捷通讯软件公司开发的,该输入法解决了小型掌上设备的文字输入问题,已经成为全球手机文字输入的标准之一。        一般手机拼...
  • markmin214
  • markmin214
  • 2013年03月28日 11:41
  • 3798

Android 基于T9输入法布局 主要用于机顶盒

主要s
  • lcw1987565
  • lcw1987565
  • 2014年04月14日 16:25
  • 929

T9搜索联系人的实现

在android中实现一个通过T9搜索联系人的功能。 使用的库: https://github.com/YiiGuxing/T9Search 引用: compile 'cn.tinkli...
  • qeqeqe236
  • qeqeqe236
  • 2017年04月01日 11:40
  • 164

安卓T9九键输入法界面

做项目需要用到九键输入法,在网上找没找到合适的,没办法,撸起袖子自己干了! 效果如下: 很少写博客,也懒得写了,直接上代码吧,下载地址如下: http://download.csdn.net/de...
  • rookie_wei
  • rookie_wei
  • 2017年05月28日 13:33
  • 864
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:【模拟】智能T9英文输入法
举报原因:
原因补充:

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