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

（phone.pas/in/out）

Problem

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

Input

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
• 2012年03月30日 11:11
• 4512

## 智能T9英文输入法

• Kinglliam
• 2006年05月12日 18:31
• 3154

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

• ZJQYJG
• 2014年11月16日 23:02
• 3654

## T9算法

• hellolinshoujie
• 2012年04月19日 11:29
• 6454

## 通讯录T9搜索算法实现

• djcxym
• 2017年07月13日 15:39
• 324

## 超强容错，智能英文输入法

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

## T9输入法实现原理和步骤

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

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

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

## T9搜索联系人的实现

• qeqeqe236
• 2017年04月01日 11:40
• 164

## 安卓T9九键输入法界面

• rookie_wei
• 2017年05月28日 13:33
• 864

举报原因： 您举报文章：【模拟】智能T9英文输入法 色情 政治 抄袭 广告 招聘 骂人 其他 (最多只允许输入30个字)