Soundex编码方法根据单词的拼写将单词进行分组,使得同一组的单词发音很接近。例如,“can"与"khawn”,"con"与"gone"在Soundex编码下是相同的。
Soundex编码方法将每个单词转换成一串数字,每个数字代表一个字母。规则如下:
1代表B,F,P或V;
2代表C,G,J,K,Q,S,X或Z;
3代表D或T;
4代表L;
5代表M或N;
6代表R。
而字母A,E,I,O,U,H,W和Y不用任何数字编码,并且相邻的、具有相同编码值的字母只用一个对应的数字代表。具有相同Soundex编码值的单词被认为是相同的单词。
输入文件中的每行为一个单词,单词中的字母都是大写,每个单词长度不超过20个字母。
对输入文件中的每个单词,输出一行,为该单词的Soundex编码
KHAWN
PFISTER
BOBBY
25
1236
11
#include<iostream>
#include <stdio.h>
using namespace std;
int main()
{
char ch[21];
int i,j,s[21],k;
while(gets(ch)!=NULL){
i=0;j=0;
while(ch[i]!='\0'){
switch (ch[i]){
case 'B':case 'F':case 'P':case 'V':{
s[j]=1;
j++;
break;
}
case 'C':case 'G':case 'J':case 'K':case 'Q':
case 'S':case 'X':case 'Z':{
s[j]=2;
j++;
break;
}
case 'D':case 'T':{
s[j]=3;
j++;
break;
}
case 'L':{
s[j]=4;
j++;
break;
}
case 'M':case 'N':{
s[j]=5;
j++;
break;
}
case 'R':{
s[j]=6;
j++;
break;
}
case 'A':case 'E':case 'I':case 'O':
case 'U':case 'W':case 'Y':{
s[j]=0;
j++;
break;
}
}
i++;
//cout<<s[j-1];
}
k=0;
for(j=0;j<i;j++){
if(s[j]==0){
k=s[j];
}
else{
if(s[j]!=k){
//s[i1]=s[j];
//i1++;
cout<<s[j];
k=s[j];
}
}
}
cout<<endl;
}
return 0;
}