poj 1002 487-3279

              主要在于对字符串的处理……

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
char map[]="2223334445556667077888999";
char tel[100000][9];
int cmp(const void *str1, const void *str2)
{
	return strcmp((char *)str1, (char *)str2);
}
void Change(char str[], int n)
{
	int i, j;
	for(i=0, j=0; j<8; i++)
	{
		if( str[i]=='-' )
			continue;
		if( str[i]>='A'&&str[i]<='Y')
			str[i]=map[str[i]-'A'];
		if( j==3 )
		{
			tel[n][j]='-';
			j++;
		}
		tel[n][j]=str[i];
		j++;
	}
	tel[n][j]='\0';
}
int main()
{
	int i, j ,n;
	char t[100];
	bool flag=false;
	scanf("%d", &n);
	for(i=0; i<n; i++)
	{
		scanf("%s", t);
		Change(t, i);
	}
	qsort(tel, n,  9,  cmp);

	i=0;
	while( i<n )
	{
		j=i;
		while( i<n && strcmp(tel[i], tel[j])==0)
				i++;
		if( i-j>1 )
		{
			printf("%s %d\n", tel[j], i-j);
			flag=true;
		} 		
	}
	if( !flag )
		printf("No duplicates.\n");
}   




你可能感兴趣的:(poj 1002 487-3279)