题解 UVA10260 【Soundex】

TRZ_2007

2019-09-24 16:25:43

Solution

这道题目其实就是一道字符串的~~水~~题。说白了就是让你将字符串转换成数字而已,唯一的坑点就是要去重。 代码是用$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(""); } } ```