如果使用姓氏在数据库中查找一个人的名字, 仅当你准确知道名字是如何拼写的时候才会成功. 不过, 假设你正在运行一个航班预订系统, 并且需要在不知道精确的拼写时查找名字. 你将需要一种方法, 基于名字的发言对他们进行编码. 然后, 查找将输出具有类似读音的名字的表项. 例如, 你将希望相同的查找可以发现Dickson和Dixon.
Soundex算法就是这样一个根据发音来编码姓名的算法. 它使得读音相似的名字具有相同的编码. 该系统被广泛使用. 它基于语言学家和速记员所熟悉的一个概念: 可以只基于辅音字母来区分英文单词和名字. 例如, 注意当只有辅音字母表示这个句子的最后几个单词(the last few words of this sentence when represented by consonants alone) : th lst fw wrds f ths sntnc whn rprsntd b cnsnnts alne. 其含义很清晰, 即使拼写看上去有点奇怪.
Soundex读取一个名字(只包含大小写字母), 先把所有字母转化成大写的, 保留第一个字母, 从第二个输入的字母开始, 对于每个字母赋予7个值之一, 其中A, E, I, O, U, H, W, Y对应0; B, F, P, V对应1, C, G, J, K, Q, S, X, Z对应2, D, T对应3; L对应4; M, N对应5; R对应6; 在赋予所有字母各自的数字之后, 将先删除0, 再把连续重复出现的相同数字减少到一位(实际上会删除成对出现的辅音字母以及重复出现的相同辅音字母组). 代码中使用了前三个余下的数字. 如果剩下的数字少于三个, 将用0填充代码. Soundex代码包含要编码的单词或名字的首字母, 其后接着三位数字的代码. 这样Lincoln转换为L524.
当我们使用Soundex时, 名字Dickson和Dixon具有相同的代码: D250. Smith, Smyth, Smythe也将分享共同的Soundex代码. Soundex方法可以有效地用于从数据库中检索名字.
现给出若干个名字, 请分别输出他们的Soundex代码.
输入文件包含多个测试数据, 每个测试数据占一行, 为一个长度不超过20的英文字母字符串. 输入到文件尾结束.
对于输入的每个数据,输出相应的结果。
Dickson
Dixon
dixon
Smith
Smyth
Smythe
D250
D250
D250
S530
S530
S530