csu 1148 词典

快排、二分查找,对于我来说是道好题,对大牛来说,瞄一眼就跳过了。。。

 1 # include <stdio.h>
2 # include <string.h>
3 # include <stdlib.h>
4
5 # define MAXN 100005
6
7 typedef struct {
8 char s[12];
9 char ss[12];
10 } word;
11
12 word dic[MAXN];
13 word key;
14
15 int cmp(const void *a, const void *b)
16 {
17 return strcmp((*(word *)a).ss, (*(word *)b).ss);
18 }
19
20 char *re_fgets(char *s1, char *s2, FILE *iop, const int ch);
21
22 int main()
23 {
24 int n;
25 word *tmp;
26
27 n = 0;
28 while (NULL != re_fgets(dic[n].s, dic[n].ss, stdin, ' '))
29 ++n;
30 qsort(dic, n, sizeof(word), cmp);
31
32 while (~scanf("%s", key.ss))
33 {
34 tmp = bsearch(&key, dic, n, sizeof(word), cmp);
35 if (tmp != NULL) printf("%s\n", (*tmp).s);
36 else printf("eh\n");
37 }
38
39 return 0;
40 }
41
42 char *re_fgets(char *s1, char *s2, FILE *iop, const int ch)
43 {
44 register int c;
45 register char *cs;
46
47 cs = s1;
48 c = getc(iop);
49 if (c == '\n' || c == EOF) return NULL;
50 else *cs++ = c;
51 while ((c = getc(iop)) != ch && c != EOF)
52 *cs++ = c;
53 *cs = '\0';
54 cs = s2;
55 while ((c = getc(iop)) != '\n' && c != EOF)
56 *cs++ = c;
57 *cs = '\0';
58 return cs;
59 }

输入的处理有点复杂,仿照 gets(),寄存器变量看来是快。。

posted on 2012-03-16 00:23  getgoing  阅读(253)  评论(0编辑  收藏  举报

导航