| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
奉献代码!仅供参考!/* 电话号码
*
* 注意:使用memset函数
*/
#include<iostream>
#include<string>
//#include<fstream>
#include<vector>
#include<cctype>
#include<algorithm>
#include<cstddef>
using namespace std;
#define MAX 100000
int caseNum;
int counter[MAX]; //全局变量自动初始化为0
bool duplicate=false;
vector<string> processedNumber;
char map(char c){ //字母的映射函数
char tmp;
switch(c){
case 'A':
case 'B':
case 'C':tmp=48+2;break;
case 'D':
case 'E':
case 'F':tmp=48+3;break;
case 'G':
case 'H':
case 'I':tmp=48+4;break;
case 'J':
case 'K':
case 'L':tmp=48+5;break;
case 'M':
case 'N':
case 'O':tmp=48+6;break;
case 'P':
case 'R':
case 'S':tmp=48+7;break;
case 'T':
case 'U':
case 'V':tmp=48+8;break;
case 'W':
case 'X':
case 'Y':tmp=48+9;break;
}
return tmp;
}
string strip(string num){ //去除字符串中的'-'
string tmp(8,'0');
int j=0;
for(size_t i=0; i<num.length(); i++){
if( num[i]=='-')
continue;
else
tmp[j++]=num[i];
}
return tmp;
}
void process(string num){ //对号码中的大写字母进行映射处理
num=strip(num); //处理前的电话号码不一定是7位的
for(int i=0;i<7;i++){ //电话号码固定为7位
if( isdigit(num[i]))
continue;
if(isalpha(num[i]))
num[i]=map(num[i]);
}
for(int j=6;j>=3;j--) //把号码转化为标准形式
num[j+1]=num[j];
num[3]='-';
processedNumber.push_back(num);
}
int main(){
//ifstream in("test.txt");
//in>>caseNum;
cin>>caseNum;
string phoneNumber;
for(int i=0; i<caseNum; i++){
//in>>phoneNumber;
cin>>phoneNumber;
process(phoneNumber);
}
sort(processedNumber.begin(),processedNumber.end());
//copy(processedNumber.begin(),processedNumber.end(),ostream_iterator<string>(cout, "\n"));
string tmp=processedNumber[0];
int k=0;
memset(counter,0,sizeof(counter)); //对应的号码至少出现一次
for(size_t i=1; i<processedNumber.size() ;i++){
if( tmp == processedNumber[i]){ //只要出现相等的情况,就一定存在重复的电话号码
counter[k]++;
duplicate=true;
}
else{
tmp= processedNumber[i];
k++;
}
}
if(!duplicate){
cout<<"No duplicates."<<endl;
return 0;
}
vector<string>::iterator it=unique(processedNumber.begin(),processedNumber.end());
k=0;
for(vector<string>::iterator it1=processedNumber.begin() ; it1!=it ; it1++,k++){
if(counter[k]==0)
continue;
cout<<(*it1)<<" "<<counter[k]+1<<endl;
}
}
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator