目录
牛客_电话号码(简单哈希模拟)
解析代码
#include <iostream>
#include <unordered_map>
#include <set>
#include <string>
using namespace std;
int main()
{
//建立映射:字母->数字
string alpha = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
string num = "22233344455566677778889999";
unordered_map<char, char> mp;
for (int i = 0; i < alpha.size(); ++i)
{
mp[alpha[i]] = num[i];
}
set<string> set; // 保存转换之后的结果,去重
int n = 0;
while (cin >> n)
{
set.clear();
// 处理n个字符串
for (int i = 0; i < n; ++i)
{
string line;
cin >> line;
string curRet; // 建立空的字符串,保存转换之后的电话号码
for (auto& ch : line) // 处理字符串中的每一个字符
{
if (isdigit(ch))
curRet += ch;
else if (isupper(ch))
curRet += mp[ch];
}
//转换格式: xxx-xxxx
curRet = curRet.substr(0, 3) + "-" + curRet.substr(3);
set.insert(curRet); // 保存结果
}
for (auto& str : set)
{
cout << str << endl;
}
cout << endl;
}
return 0;
}