POJ#1002_487-3279
2016-04-12 11:11
309 查看
题目链接:487-3279
题目大意是输入一些电话号码,这些电话号码可能含有字母,找出相同的电话号码。
我的AC代码:
需要注意的是迭代器不能用auto,不然编译错误,如auto f = mp.find(s)出现编译错误,std::map<string,int>::iterator f = mp.find(s)就不会。
题目大意是输入一些电话号码,这些电话号码可能含有字母,找出相同的电话号码。
我的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)就不会。
相关文章推荐
- android(NDK+JNI)---Android使用JNI实现Java与C之间传递数据
- 几个常用的操作系统进程调度算法
- java 获取日期和时间方法总结
- Android Service 使用总结
- VS学习笔记2
- Redis_字典
- mips64高精度时钟引起ktime_get时间不准,导致饿狗故障原因分析【转】
- hdu 5171 GTY's birthday gift
- 写给新手:网站改版的SEO因素!
- ROC曲线的绘制
- leetcode之Find the Duplicate Number
- Class.forName的作用以及为什么要用它
- linux下grep文件内容搜索工具及基本正则表达式详解
- CascadeView级联组件实现思路详解(分离思想和单链表)
- Crontab重启和crontab -e位置
- EhCache <one>
- ORACLE ADR 不能直接执行repair failure,需要先执行advice failure,生成修复脚本
- [BUG] Dashboard报错:if usages['subnets']['available'] <= 0: KeyError: 'available'
- VGA,DVI,RS232,UART,SCSI,SATA等等接口怎么区分?
- Android中Context详解 ---- 你所不知道的Context