zrq495
www.zrq495.com

题意:给出一些单词,以#结束,判断这些单词是否是ananagram。如果是按字典序输出。

思路:每个大写字母变成小写,把单词中的字母按字典序排,再把单词按字典序排序,然后判断。最后输出没有改变的单词。

 1 #include<stdio.h>
 2 #include<string.h>
 3 #include<stdlib.h>
 4 
 5 typedef struct
 6 {
 7     char s1[90];    //存放最初的单词。
 8     char s2[90];    //存放小写排序后的单词。
 9     int flag;      //标记是否ananagram10 }word;
11 
12 int cmp1(const void *a, const void *b)    //字母排序
13 {
14     return *(char *)a-*(char *)b;
15 }
16 
17 int cmp2(const void *a, const void *b)    //原单词排序
18 {
19     word *pa = (word *)a;
20     word *pb = (word *)b;
21     return strcmp(pa->s1, pb->s1);
22 }
23 
24 int cmp3(const void *a, const void *b)    //改过的单词排序
25 {
26     word *pa = (word *)a;
27     word *pb = (word *)b;
28     return strcmp(pa->s2, pb->s2);
29 }
30 
31 int main()
32 {
33     int i, j;
34     word w[1010];
35     i=0;
36     memset(w[i].s1, 0, sizeof(w[i].s1));
37     memset(w[i].s2, 0, sizeof(w[i].s2));
38     w[i].flag=0;              //0是ananagram
39     scanf("%s%*c", w[i].s1);
40     while(strcmp(w[i].s1, "#"))
41     {
42         for (j=0; j<strlen(w[i].s1); j++)
43         {
44             if (w[i].s1[j]>='A' && w[i].s1[j]<='Z')
45             {
46                 w[i].s2[j]=w[i].s1[j]+32;        //大写变小写
47                 continue;
48             }
49             w[i].s2[j]=w[i].s1[j];
50         }
51         i++;
52         memset(w[i].s1, 0, sizeof(w[i].s1));
53         memset(w[i].s2, 0, sizeof(w[i].s2));
54         w[i].flag=0;                  
55         scanf("%s%*c", w[i].s1);
56     }
57     for (j=0; j<i; j++)              //字母排序
58     {
59         qsort(w[j].s2, strlen(w[j].s2), sizeof(char), cmp1);
60     }
61     qsort(w, i, sizeof(word), cmp3);      //单词排序
62     for (j=0; j<i; j++)
63     {
64         if (strlen(w[j].s2)>1)        //单个字母是ananagram
65         {
66             if (strcmp(w[j].s2, w[j+1].s2) == 0)
67             {
68                 w[j].flag++;
69                 w[j+1].flag++;
70             }
71         }
72     }
73     qsort(w, i, sizeof(word), cmp2);    //单词排序
74     for (j=0; j<i; j++)
75     {
76         if (w[j].flag==0)
77             puts(w[j].s1);
78     }
79     return 0;
80 }
posted on 2012-07-17 16:32  zrq495  阅读(186)  评论(0编辑  收藏  举报