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,0,U,H,W和Y在Soundex中不用编码的,可以直接忽略。相邻的并且具有相同编码值的字母只用一个对应的数字表示。具有相同Soundex编码值的单词被认为是相同的单词。
输入格式:
输入文件中的每行为一个单词,全部大写,不超过20个字母。
输出格式:
对输入文件中的每个单词,输出该单词的Soundex编码,占一行。
输入样例:
KHAWN
PFISTER
BOBBY
输出样例:
25
1236
11
解题代码:
#include <stdio.h>
#include <string.h>
int main()
{
int i,b[21];
char a[21];
while(scanf("%s",a)!=EOF)
{
a[20]={0};
b[20]={0};
for(i=0;a[i]!='\0';i++)
{
if((a[i]=='B')+(a[i]=='F')+(a[i]=='P')+(a[i]=='V')==1)
b[i]=1;
else if((a[i]=='C')+(a[i]=='G')+(a[i]=='J')+(a[i]=='K')+(a[i]=='Q')+(a[i]=='S')+(a[i]=='X')+(a[i]=='Z')==1)
b[i]=2;
else if((a[i]=='D')+(a[i]=='T')==1)
b[i]=3;
else if(a[i]=='L')
b[i]=4;
else if((a[i]=='M')+(a[i]=='N')==1)
b[i]=5;
else if(a[i]=='R')
b[i]=6;
else
b[i]=0;
}
if(b[0]!=0)
printf("%d",b[0]);
for(i=1;i<strlen(a);i++)
if(b[i]!=0&&b[i]!=b[i-1])
printf("%d",b[i]);
printf("\n");
}
return 0;
}