POJ 1002

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

posted on 2009-07-02 17:28 Johnnx 阅读(376) 评论(0)  编辑 收藏 引用


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


导航

<2009年7月>
2829301234
567891011
12131415161718
19202122232425
2627282930311
2345678

统计

常用链接

留言簿(1)

随笔档案

搜索

最新评论

阅读排行榜

评论排行榜