- 把每行输入的字符串转换成电话号码的格式
- 按照字典序对转换后的字符串进行排序
- 从头到尾遍历每个字符串统计每个字符串重复的次数并按要求输出
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <string>
using namespace std;
const int maxn = 100000 + 10;
string tel[maxn];
char trans( char a )
{
if( a == 'A' || a == 'B' || a == 'C' )
return '2';
else if( a == 'D' || a == 'E' || a == 'F' )
return '3';
else if( a == 'G' || a == 'H' || a == 'I' )
return '4';
else if( a == 'J' || a == 'K' || a == 'L' )
return '5';
else if( a == 'M' || a == 'N' || a == 'O' )
return '6';
else if( a == 'P' || a == 'R' || a == 'S' )
return '7';
else if( a == 'T' || a == 'U' || a == 'V' )
return '8';
else if( a == 'W' || a == 'X' || a == 'Y' )
return '9';
}
int main()
{
int n;
char a[30];
char st[30];
while( ~scanf( "%d", &n ) )
{
for( int i = 0; i < n; i++)
{
scanf( "%s", a );
int k = 0;
for( int j = 0; a[j] != '\0'; j++ )
{
if( k == 3 )
st[k++] = '-';
if( a[j] >= '0' && a[j] <= '9' )
st[k++] = a[j];
else if( a[j] >= 'A' && a[j] <= 'Z' )
st[k++] = trans( a[j] );
}
st[k] = '\0';
tel[i] = st;
}
sort( tel, tel + n );
int cnt = 1;
bool flag = 0; //标记“No duplicates.”的情况
for( int i = 1; i < n; i++ )
{
if( tel[i] == tel[i-1] )
cnt++;
else
{
if( cnt >= 2 )
{
cout << tel[i-1] << " " << cnt << endl;
flag = 1;
}
cnt = 1;
}
}
if( cnt >= 2 ) //最后一个字符串重复的次数
{
cout << tel[n-1] << " " << cnt << endl;
flag = 1;
}
if( !flag )
printf( "No duplicates.\n" );
}
}