这个是超时版的:
#include<iostream>
#include<string>
using namespace std;
typedef struct TelephoneNumber{//表示电话号码的结构体
string number;//电话号码串
int prefix;//首数字
int count;//重复次数
}TelephoneNumber;
/*
#include<fstream>
fstream fin ("input.txt",ios::in);
#define cin fin
//*/
struct TelephoneNumber Transform(struct TelephoneNumber m)
{
int i;
for(i=0;m.number[i]=='-';)
m.number.erase(i,1);
for(i=m.number.length()-1;m.number[i]=='-';i--)
m.number.erase(i,1);
for(i=0;i<m.number.length();)//去掉连接符
if(m.number[i]=='-')
m.number.erase(i,1);
else
i++;
for(i=0;i<7;i++)
{
switch(m.number[i])
{
case 'A':
case 'B':
case 'C':
case '2': m.number[i]='2'; break;
case 'D':
case 'E':
case 'F':
case '3': m.number[i]='3'; break;
case 'G':
case 'H':
case 'I':
case '4': m.number[i]='4'; break;
case 'J':
case 'K':
case 'L':
case '5': m.number[i]='5'; break;
case 'M':
case 'N':
case 'O':
case '6': m.number[i]='6'; break;
case 'P':
case 'R':
case 'S':
case '7': m.number[i]='7'; break;
case 'T':
case 'U':
case 'V':
case '8': m.number[i]='8'; break;
case 'W':
case 'X':
case 'Y':
case '9': m.number[i]='9'; break;
}
}
m.number.insert((string::size_type)3,1,'-');//加上连接符
m.prefix=m.number[0]-'0';//给其首数字字段赋值
return m;
}
int main()
{
int i,j,T,flag=0;
struct TelephoneNumber m;
cin>>T;
struct TelephoneNumber *resultSet=new struct TelephoneNumber[T];//号码集
for(i=0;i<T;i++)
{
cin>>m.number;
resultSet[i]=Transform(m);
//cout<<resultSet[i].number<<" "<<resultSet[i].prefix<<endl;
}
for(i=0;i<T;i++)
{
resultSet[i].count=1;//初始化结构体中用于统计重复次数的count
if(resultSet[i].number=="")//跳过已搜索过的串
continue;
else
{
for(j=i+1;j<T;j++)
if(resultSet[i].number==resultSet[j].number)
{
resultSet[j].number="";//相同的只保留一个,其余的都清空,以后就不用重复搜索了
resultSet[i].count++;
}
}
}
for(i=0;i<=9;i++)
for(j=0;j<T;j++)
if(resultSet[j].count>1 && resultSet[j].prefix==i)//被清空的串的count值一定是1
{
flag=1;
cout<<resultSet[j].number<<" "<<resultSet[j].count<<endl;
}
if(!flag)
cout<<"No duplicates."<<endl;
return 0;
}