您的位置:首页 > 其它

POJ#1002_487-3279

2016-04-12 11:11 309 查看
题目链接:487-3279

题目大意是输入一些电话号码,这些电话号码可能含有字母,找出相同的电话号码。

我的AC代码:

#include <iostream>
#include <string>
#include <map>
using std::string;
/**************************************************
*参数:字符串s
*返回值:无
*函数作用:将字符串中的‘-’去掉
***************************************************/
void change(string &s)
{
int len = s.size();
int i = 0, j = -1;
for (i = 0; i < len; ++i)
{
if (s[i] != '-')
s[++j] = s[i];
}
s = s.substr(0, j+1);
}

/**************************************************
*参数:字符串s
*返回值:无
*函数作用:将字符串中的英文字符映射成数字
***************************************************/
void Char2Num(string &s)
{
string::size_type i = s.find_first_not_of("0123456789");

if (i != string::npos)
{
string::size_type len = s.size();
for (; i < len; ++i)
{
switch (s[i])
{
case 'A':
case 'B':
case 'C':
s[i] = '2';
break;
case 'D':
case 'E':
case 'F':
s[i] = '3';
break;
case 'G':
case 'H':
case 'I':
s[i] = '4';
break;
case 'J':
case 'K':
case 'L':
s[i] = '5';
break;
case 'M':
case 'N':
case 'O':
s[i] = '6';
break;
case 'P':
case 'R':
case 'S':
s[i] = '7';
break;
case 'T':
case 'U':
case 'V':
s[i] = '8';
break;
case 'W':
case 'X':
case 'Y':
s[i] = '9';
break;
}
}
}
}
/**************************************************
*参数:map<string,int>
*返回值:无
*函数作用:输出map中符合要求的内容
***************************************************/
void show(std::map<string, int> &mp)
{
bool flag = true;

for (std::map<string, int>::iterator begin = mp.begin(); begin != mp.end(); ++begin)
{
if (begin->second > 1)
{
flag = false;
std::cout << (begin->first).substr(0, 3) << "-" << (begin->first).substr(3) << " " << begin->second << std::endl;
}
}
if (flag)
std::cout << "No duplicates." << std::endl;
}
int main()
{
std::map<string, int> mp;
string s;
int n;
std::cin >> n;
while (n--)
{
std::cin >> s;
change(s);
Char2Num(s);
std::map<string,int>::iterator f = mp.find(s);
if (f != mp.end())
++f->second;
else
mp.insert(std::make_pair(s,1));
}
show(mp);
return 0;
}


需要注意的是迭代器不能用auto,不然编译错误,如auto f = mp.find(s)出现编译错误,std::map<string,int>::iterator f = mp.find(s)就不会。


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: