标签:des style class blog code java
Time Limit: 10000/5000 MS
(Java/Others) Memory Limit: 102400/204800 K
(Java/Others)
Total Submission(s): 12617 Accepted
Submission(s): 4031
1 #include <iostream>
2 #include <stdio.h>
3 #include <string.h>
4 #include <malloc.h>
5 using namespace std;
6
7 struct Tire{
8 Tire *next[26];
9 char *trans; //定义一个指向一维数组的指针
10 Tire() //构造函数
11 {
12 int i;
13 for(i=0;i<26;i++){
14 next[i]=NULL;
15 }
16 trans = NULL;
17 }
18 };
19
20 Tire root;
21
22 void Insert(char trans[],char word[]) //将单词word插入到字典树中,并在最后加上翻译trans
23 {
24 Tire *p = &root;
25 int i;
26 for(i=0;trans[i];i++){
27 int n = trans[i]-‘a‘;
28 if(p->next[n]==NULL)
29 p->next[n] = new Tire;
30 p = p->next[n];
31 }
32 p->trans = (char*)malloc(sizeof(char)*11);
33 strcpy(p->trans,word);
34 }
35 void Find(char str[]) //找到对应的翻译并输出,没找到则输出原来的字符串
36 {
37 Tire *p = &root;
38 int i;
39 for(i=0;str[i];i++){
40 int n = str[i]-‘a‘;
41 if(p->next[n]==NULL){
42 printf("%s",str);
43 return ;
44 }
45 p = p->next[n];
46 }
47 if(p->trans==NULL)
48 printf("%s",str);
49 else
50 printf("%s",p->trans);
51 }
52
53 int main()
54 {
55 char word[11],trans[11];
56 scanf("%s",word);
57 while(scanf("%s",word)!=EOF){ //输入字典
58 if(strcmp(word,"END")==0) //遇到结束标记
59 break;
60 scanf("%s",trans);
61 Insert(trans,word); //将单词word插入到字典树中,并在最后加入其翻译
62 }
63 scanf("%s",word);
64 getchar();
65 char str[3001];
66 while(gets(str)){
67 if(strcmp(str,"END")==0)
68 break;
69 int i,j=0;
70 char t[3001]={0};
71 for(i=0;str[i];i++){
72 if(‘a‘<=str[i] && str[i]<=‘z‘){ //检测到的是小写字母
73 t[j++] = str[i];
74 }
75 else{
76 t[j] = ‘\0‘;
77 if(t[0]!=‘\0‘){ //不是空的
78 Find(t); //找到对应的翻译并输出,没找到则输出原来的字符串
79 t[0]=‘\0‘,j=0; //初始化t
80 }
81 printf("%c",str[i]);
82 }
83 }
84 printf("\n");
85 }
86
87 return 0;
88 }
Freecode : www.cnblogs.com/yym2013
hdu 1075:What Are You Talking About(字典树,经典题),布布扣,bubuko.com
hdu 1075:What Are You Talking About(字典树,经典题)
标签:des style class blog code java
原文地址:http://www.cnblogs.com/yym2013/p/3781741.html