# include & lt 문자열>
네임스페이스 STD 사용
Constintmaxn =1000000;
Stringtrans [maxn];
Int len
Typedef 구조 사전 노드 {
Structdic treenode * node [26];
Int 키
} * Dictree
그물 뿌리
Void insert_word (문자열 str)
{
Dictree current, newnode
현재 = 루트
For(int I = 0;; 나 & ltstr.length (); I++){
If (현재-"; 노드 [str [I]-'a'! = 0){
현재 = 현재-> 노드 [str [I]-[a];
}
그렇지 않으면 {
New node = (dictree) malloc (sizeof (dictreenode));
For(int j = 0;; J & lt26; J++) new node-> 노드 [j] = 0;
현재-> Node [str [I]-[a'] = new node;
현재 = 새 노드
현재-> 키 =-1;
}
}
현재-> 키 = len-1;
}
Intfind _ word (문자열)
{
네트 트리 전류
현재 = 루트
For(int I = 0;; 나 & ltstr.length (); I++){
If (현재-"; 노드 [str [I]-'a'! = 0)
현재 = 현재-> 노드 [str [I]-[a];
Else 는-1;
}
반환 전류-> 관건
}
Int main ()
{
문자열 tmp, temp
Root = (dictree) malloc (sizeof (dictreenode));
For(int I = 0;; 나 & lt26; I++) 루트-"; 노드 [I] = 0;
루트-> 키 =-1;
Len = 0;;
CIN>;; & gttmp
If (tmp = = "시작") {}
동시에 (CIN>;; & gttmp ){
If (tmp = = "end") break;
그렇지 않으면 {
Trans [len] = tmp;
Le n++;
CIN>;; & gttmp
_ 단어 (tmp) 를 삽입합니다.
}
}
게블린 (CIN, tmp); //마무리 완료 후 줄 바꿈
While (게블린 (CIN, tmp))
Temp = ""; //초기화 온도
If (tmp = = "시작") 계속;
Elseif (tmp = = "end") break;
그렇지 않으면 {
For(int I = 0;; 나< = tmp.length (); I++){
(I & lttmp.length () & 인 경우 & amptmp [I] =' a' amp; & amptmp [I] < =' z') temp.append (1,tmp [I]);
그렇지 않으면 {
만약 (! Temp.empty ())
Intans = find _ word (temp);
If(ans & gt;; -1) cout & lt & lttrans [ans];
Else cout & lt& lttemp
Temp.clear ();
}
(I & lttmp.length ()) cout < & lt tmp [I];
}
If (I = = tmp.length ()) cout < & ltendl
}
}
}
//system ("pause");
0 을 반환합니다
}