Description
Input
Output
Sample Input
START from fiwo hello difh mars riwosf earth fnnvk like fiiwj END START difh, i‘m fiwo riwosf. i fiiwj fnnvk! END
Sample Output
hello, i‘m from mars. i like earth!
Hint
Huge input, scanf is recommended.
代码如下:
#include<stdio.h>
#include<iostream>
#include<string.h>
using namespace std;
struct node{
int count;
char s[200];
struct node *a[27];
node(){
count=0;
memset(a,0,sizeof(a));
}
};
struct node *k,*d;
char s[1001],s1[1001],s2[1001];
void insert(char c1[],char c2[]){
d=k;
int w=strlen(c1);
for(int i=0;i<w;i++){
if(d->a[c1[i]-'a']==NULL)
d->a[c1[i]-'a']=new node;
d=d->a[c1[i]-'a'];
}
d->count=1;
strcpy(d->s,c2);
}
char *find(char c1[]){
d=k;
int w=strlen(c1);
for(int i=0;i<w;i++){
d=d->a[c1[i]-'a'];
if(d==0)return NULL;
}
if(d->count==0)return NULL;
return d->s;
}
int l;
char z[2333];
int main(){
scanf("%s",&s);
k=new node;
while(1){
scanf("%s",&s1);
if(strcmp(s1,"END")==0)break;
scanf("%s",&s2);
insert(s2,s1);
}
scanf("%s",&s);
getchar();
while(1){
gets(s);
if(strcmp(s,"END")==0)break;
for(int i=0;i<strlen(s);i++){
l=0;
while(s[i]>='a'&&s[i]<='z')
z[l++]=s[i++];
z[l]='\0';
char *ans=find(z);
if(ans==0)cout<<z;
else cout<<ans;
cout<<s[i];
}
cout<<endl;
}
return 0;
}
原文:http://blog.csdn.net/qq_34215568/article/details/51332398