【模拟】智能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
  • 4249

Triivi智能英文输入法2

  • 2009-04-21 12:10
  • 7.85MB
  • 下载

Triivi 智能英文输入法

  • 2008-06-10 21:56
  • 7.85MB
  • 下载

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

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

Triivi 智能英文输入法 V0.98

  • 2007-01-22 14:48
  • 6.75MB
  • 下载

智能英文输入法Triivi

  • 2006-09-09 10:07
  • 6.15MB
  • 下载

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

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

hi英文输入法32、64兼容win8

  • 2013-06-17 11:47
  • 15.01MB
  • 下载

iOS textView输入限制中文输入法和英文输入法 及是否高亮状态区分

在做iOS 的文字输入限制时候,总是在中文输入法状态时候监听到英文字母。 废话不多说,直接上代码, -(void)textViewDidChange:(UITextView *)textView{...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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