题目:你到了新的国家,手中有一个字典,把对应的语言翻译成英语。
分析:字符串,字典树。利用新语言建树,对应节点存储相应的英文单词,查询输出。
说明:强大的ungetc函数。
#include <iostream>
#include <cstdlib>
#include <cstring>
#include <cstdio>
using namespace std;
char Nword[21],Eword[21];
/* Trie define */
#define nodesize 1000001 //节点个数
#define dictsize 26 //字符集大小
typedef struct node
{
int flag; //值域
node* next[dictsize];
char words[21];
}tnode;
tnode dict[nodesize];
int ID[256];
class Trie
{
private:
int size;
int count;
tnode* root;
public:
Trie() {makeID(); initial();}
void makeID() {
for ( int i = 0 ; i < 26 ; ++ i )
ID['a'+i] = i;
}
void initial() {
memset(dict, 0, sizeof(dict));
count=0;size=0;root=newnode();
}
tnode* newnode() {return &dict[size ++];}
void insert(char* word, char *text) {
tnode* now = root;
for (int i = 0 ; word[i] ; ++ i) {
if (!now->next[ID[word[i]]])
now->next[ID[word[i]]] = newnode();
now = now->next[ID[word[i]]];
}
now->flag = 1;
strcpy(now->words, text);
}
void query(char* word) {
tnode* now = root;
for (int i = 0 ; word[i] ; ++ i) {
if (!now->next[ID[word[i]]]) {
printf("eh\n");
return;
}
now = now->next[ID[word[i]]];
}
printf("%s\n",now->words);
}
}trie;
/* Trie end */
int main()
{
trie.initial();
char buf;
while ((buf = getchar()) != '\n') {
ungetc(buf,stdin);
scanf("%s %s",Eword,Nword);
trie.insert(Nword,Eword);
getchar();
}
while (~scanf("%s",Nword))
trie.query(Nword);
return 0;
}