POJ 1002 487-3279(map应用)

用map+string写的,减少代码量

本题有几个坑:

1.输入字符串至少要开到50

2.要考虑电话号码中有0的情况,比如000-0000


map插入后会自动按字典序排序。

迭代器定义方法:

map<string,int>::iterator p;


代码:

#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
#include <algorithm>
#include <map>
#include <string>
map<string,int> Num;

string Hash(char c){
	if(c=='A'||c=='B'||c=='C') return "2";
	if(c=='D'||c=='E'||c=='F') return "3";
	if(c=='G'||c=='H'||c=='I') return "4";
	if(c=='J'||c=='K'||c=='L') return "5";
	if(c=='M'||c=='N'||c=='O') return "6";
	if(c=='P'||c=='R'||c=='S') return "7";
	if(c=='T'||c=='U'||c=='V') return "8";
	if(c=='W'||c=='X'||c=='Y') return "9";
}

int main(){
	int N;
	scanf("%d",&N);
	for(int i=0;i<N;i++){
		char s[60];
		scanf("%s",s);
		int len=strlen(s);
		string num="";
		for(int i=0;i<len;i++){
			if(s[i]=='-') continue;
			if(isdigit(s[i])){
				num+=s[i];
			}
			else num+=Hash(s[i]);
		}
		Num[num]++;
	}
	map<string,int>::iterator p;
	bool flag=0;
	for(p=Num.begin();p!=Num.end();p++){
		string n=(*p).first;
		if(Num[n]<=1) continue;
		flag = 1;
		for(int i=0;i<3;i++){
			cout<<n[i];
		}
		printf("-");
		for(int i=3;i<7;i++) cout<<n[i];
		printf(" %d\n",Num[n]);
	}
	if(!flag) printf("No duplicates.");
	return 0;
}



你可能感兴趣的:(map)