题解 UVA10260 【Soundex】
TRZ_2007
2019-09-24 16:25:43
这道题目其实就是一道字符串的~~水~~题。说白了就是让你将字符串转换成数字而已,唯一的坑点就是要去重。
代码是用$switch$写的,可能有些昂长,请耐心查看QAQ。
```
#include <bits/stdc++.h>
using namespace std;
const int N = 1e2+10;
char str[N];
int ans[N];
void Turn_str(char s[])
{
memset(ans,0,sizeof(ans));
for(int i=0;i<strlen(s);i++)
{
switch(s[i])
{
case 'B':ans[i] = 1;break;
case 'F':ans[i] = 1;break;
case 'P':ans[i] = 1;break;
case 'V':ans[i] = 1;break;
case 'C':ans[i] = 2;break;
case 'G':ans[i] = 2;break;
case 'J':ans[i] = 2;break;
case 'K':ans[i] = 2;break;
case 'Q':ans[i] = 2;break;
case 'S':ans[i] = 2;break;
case 'X':ans[i] = 2;break;
case 'Z':ans[i] = 2;break;
case 'D':ans[i] = 3;break;
case 'T':ans[i] = 3;break;
case 'L':ans[i] = 4;break;
case 'M':ans[i] = 5;break;
case 'N':ans[i] = 5;break;
case 'R':ans[i] = 6;break;
default :ans[i] = 0;
}
}
if(ans[0] != 0) printf("%d",ans[0]);
for(int i=1;i<strlen(str);i++)
{
if(ans[i] == 0) continue;
if(ans[i-1] == ans[i]) continue;//唯一的坑点,去重
printf("%d",ans[i]);
}
}
int main()
{
while(scanf("%s",str) != EOF)
{
Turn_str(str);
puts("");
}
}
```