# 【模拟】智能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输入法的实现

2012-03-30 11:11:04

#### 智能T9英文输入法

2006-05-12 18:31:00

#### WinCE T9输入法 (支持拼音、手写、笔画、英文，可定制功能)

2013-08-26 13:30:11

#### 安卓<em>T9</em>实体按键中文<em>输入法</em>

2018年05月09日 0B 下载

#### WPF简单<em>T9</em>键盘<em>英文输入法</em>

2018年05月07日 0B 下载

#### 编程实现 T9输入法 分离数字键到字母

2006-03-02 23:08:00

#### 直接在Keil下仿真的T9拼音输入法（完整版）

2009-03-18 22:58:00

#### t9 输入法

2013-12-30 01:35:05

#### T9输入法源代码

2013年06月24日 53KB 下载

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

2017-05-28 13:33:53