题意:Soundex编码是将基于它们的拼写听起来相同的单词归类在一起。例如,“can”和“khawn”在Soundex编码下是等价的。
这道题WA了两发,拓展了个知识。
#include<iostream>
#include<cstdio>
#include<map>
#include<vector>
#include<cstring>
#include<algorithm>
using namespace std;
const int maxn=25;
char s[maxn];
int main()
{
map<char,int>m;
m['B']=1;
m['F']=1;
m['P']=1;
m['V']=1;
m['Z']=2;
m['X']=2;
m['S']=2;
m['Q']=2;
m['K']=2;
m['J']=2;
m['G']=2;
m['C']=2;
m['T']=3;
m['D']=3;
m['L']=4;
m['N']=5;
m['M']=5;
m['R']=6;
while(scanf("%s",s)!=EOF){
int len=strlen(s);
vector<int>v;
for(int i=0;i<len;i++){
if(m[s[i]]){
v.push_back(m[s[i]]);
}else{
v.push_back(0);
}
}
int len1=v.size();
for(int i=0;i<len1;i++){
int flag=1;
for(int j=i+1;j<len1;j++){
if(v[j]==v[i]){
v[j]=0;
}else{
flag=0;
}
if(!flag){
break;
}
}
}
len1=v.size();
for(int i=0;i<len1;i++){
if(v[i]){
printf("%d",v[i]);
}
}
printf("\n");
}
return 0;
}