http://acm.pku.edu.cn/JudgeOnline/problem?id=1002
这是一个字符串处理的问题。通过这道题,我得到3点收获:一、借用事先定义的map[]数组来简化字母与数字之间的转换;二、设置两个数组,一个用来输入,一个用来存储转化以后的。这样可以方便转化;三、如何输出这些重复字符串和对它们进行计数。
1
2 #include<stdio.h>
3 #include<string.h>
4 #include<stdlib.h>
5
6 int n;
7 char a[100001][20],str[50];
8 char map[] = "2223334445556667777888999";//
9
10 int compare(const void *p,const void *q){
11 return (strcmp((char*)p,(char*)q));
12 }
13 int main()
14 {
15 while(scanf("%d",&n) != EOF){
16 for(int i = 0;i < n;++i){
17 int flag = 0;
18 scanf("%s",str);
19 int j = 0,k = 0;
20 while(k < 8){//
21 if(k == 3){
22 a[i][k++] = '-';
23 continue;
24 }
25 if(str[j] <= 'Z' && str[j] >= 'A'){
26 a[i][k++] = map[str[j++] - 'A'];
27 continue;
28 }
29 else if(str[j] == '-'){
30 j++;
31 continue;
32 }
33 a[i][k++] = str[j++];
34 }
35 a[i][8] = '\0';
36 }
37 qsort(a,n,20,compare);
38 int noduplicates = 1;
39 int p,q;
40 p = 0;
41 while(p < n){//
42 q = p;
43 p++;
44 while(p < n && !strcmp(a[p],a[q]))p++;
45 if(p - q > 1){
46 printf("%s %d\n",a[q],p - q);
47 noduplicates = 0;
48 }
49 }
50 if(noduplicates)printf("No duplicates.\n");
51 }
52
53
54
55 system("pause");
56 return 0;
57 }
58
code