START from fiwo hello difh mars riwosf earth fnnvk like fiiwj END START difh, i‘m fiwo riwosf. i fiiwj fnnvk! END
hello, i‘m from mars. i like earth! [hint] Huge input, scanf is recommended. [/hint]#include<stdio.h> #include<string.h> #include<malloc.h> typedef struct nnn { int flag; char *traslat; struct nnn *next[26]; }node; node *builde() { node *p=(node*)malloc(sizeof(node)); p->flag=0; for(int i=0;i<26;i++) p->next[i]=NULL; return p; } node *root; void insert(char str[],char tras[]) { node *p=root; for(int i=0;str[i]!='\0';i++) { if(p->next[str[i]-'a']==NULL) p->next[str[i]-'a']=builde(); p=p->next[str[i]-'a']; } p->flag=1; int len=strlen(tras)+1; p->traslat=(char*)malloc(len*sizeof(char)); strcpy(p->traslat,tras); } void trasl(char str[]) { node *p=root; for(int i=0;str[i]!='\0';i++) { if(p->next[str[i]-'a']==NULL) { printf("%s",str); return ; } p=p->next[str[i]-'a']; } if(p->flag) printf("%s",p->traslat); else printf("%s",str); } int main() { char tras[15],str[3005],str1[15]; root=builde(); while(scanf("%s",tras)>0&&strcmp(tras,"END")!=0) { if(strcmp("START",tras)==0)continue; scanf("%s",str); insert(str,tras); } getchar(); while(gets(str),strcmp(str,"END")!=0) { if(strcmp("START",str)==0)continue; int len=strlen(str); for(int i=0,j=0;i<=len; i++) { if(str[i]>='a'&&str[i]<='z') str1[j++]=str[i]; else { str1[j]='\0'; if(j) trasl(str1); if(i==len||str[i]=='\n')printf("\n"); else if(str[i]=='\t') printf("\t"); else printf("%c",str[i]); j=0; } } } }
hdu1075What Are You Talking About (字典树)
原文地址:http://blog.csdn.net/u010372095/article/details/38071389