TRZ_2007 的博客

TRZ_2007 的博客

题解 UVA10260 【Soundex】

posted on 2019-09-24 16:25:43 | under 题解 |

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