HDU 1442(Soundex Indexing)

基础题,建立对照表,将每个字母对应指定的数字字符,按要求转换字符串即可,注意输出格式。

#include <iostream>
#include <map>
#include <string>
using namespace std;

map<char, char> m; //字母-数字字符

//初始化对照表
void init()
{
    m['B'] = m['F'] = m['P'] = m['V'] = '1';
    m['C'] = m['G'] = m['J'] = m['K'] = m['Q'] = m['S'] = m['X'] = m['Z'] = '2';
    m['D'] = m['T'] = '3';
    m['L'] = '4';
    m['M'] = m['N'] = '5';
    m['R'] = '6';
    m['A'] = m['E'] = m['I'] = m['O'] = m['U'] = m['H'] = m['W'] = m['Y'] = 'X';
}

//将字符串s编码
string encode(const string& s)
{
    string r(s.substr(0, 1));

    for (int i = 1; s[i]; i++)
    {
        if (r.size() == 4)
            break;
        else if (m[s[i]] != 'X' && m[s[i]] != m[s[i - 1]])
            r += m[s[i]];
    }

    if (r.size() < 4)
        r += string(4 - r.size(), '0');

    return r;
}

int main()
{
    init();

    cout << string(9, ' ') << "NAME" << string(21, ' ') << "SOUNDEX CODE" << endl;
    string s;
    while (cin >> s)
        cout << string(9, ' ') << s << string(25 - s.size(), ' ') << encode(s) << endl;
    cout << string(19, ' ') << "END OF OUTPUT" << endl;
    return 0;
}

继续加油。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值