题意 : 计算给定的出现次数大于1次的电话号码并输出号码和次数,按aaa-bbbb格式 输出;
解法 : 使用MAP把号码和出现次数的映射存起啦, 用迭代器遍历输出;
//code
#include<iostream> #include<map> #include<cstdio> #include<cstring> #include<string> #include<cctype> #include<algorithm> using namespace std; char map_num[27]={2,2,2,3,3,3,4,4,4,5,5,5,6,6,6,7,0,7,7,8,8,8,9,9,9}; struct String{ char value[100]; friend bool operator == (String a, String b) { return strcmp(a.value, b.value)==0; } friend bool operator < (String a, String b) { return strcmp(a.value, b.value)<0; } }; int main() { //freopen("in.txt", "r", stdin); //freopen("out.txt", "w", stdout); int Case; scanf("%d", &Case); map<String, int>_m; map<String, int>::iterator iter; for(int i=0; i<Case; i++) { char ch; int l=0; char phonenum[100]; String Tmp; scanf("%s", phonenum); for(int k=0; phonenum[k]; k++) { ch = phonenum[k]; if(isalpha(ch)) { Tmp.value[l++] = map_num[ch-'A']+'0'; } else if(isdigit(ch)) { Tmp.value[l++] = ch; } if(l == 3) { Tmp.value[l++] = '-'; } } Tmp.value[l] = '\0'; iter = _m.find(Tmp); if(iter == _m.end()) _m.insert(map<String, int>::value_type(Tmp, 1)); else iter->second++; } int Sum=0; for(iter = _m.begin(); iter != _m.end(); ++iter) { if(iter->second > 1) { printf("%s %d\n", iter->first.value, iter->second); Sum ++; } } if(Sum == 0) printf("No duplicates.\n"); return 0; }