64,685
社区成员
发帖
与我相关
我的任务
分享
//单词映射,要能够快速找到一个单词。
#include<iostream>
#include<cstring>
using namespace std;
struct date
{
int valu;//valu的值表示从头节点到该点的路径的单词是否出现或表示它的值。-1表示没有出现。
date *next[26];//类似于26叉树。每一个分叉就代表着一个字母。
};
int main()
{
int m;
cin>>m;
getchar();
int i,j,k;
char ch;
char word[10];
int valu;
date begin;//先定义个头节点。
begin.valu=0;
for (i=0;i<26;i++)
{
begin.next[i]=NULL;//初值都为空指针,即为空的单词库。
}
for (k=0;k<m;k++)
{
cin>>ch;
getchar();
if (ch=='A')
{
cin>>word;
cin>>valu;
date temp=begin;//开始定位在树头,开始查找。
for (j=0;j<26;j++)
{
temp.next[j]=begin.next[j];
}
i=0;
while (word[i]!='\0')
{
if (temp.next[word[i]-'a']!=NULL)
{
temp=*temp.next[word[i]-'a'];
}
else
{
temp.next[word[i]-'a']=new date;
temp=*temp.next[word[i]-'a'];
for (j=0;j<26;j++)
{
temp.next[j]=NULL;
}
temp.valu=-1;
}
i++;
}
temp.valu=valu;
}
if (ch=='Q')
{
cin>>word;
date temp=begin;
for (j=0;j<26;j++)
{
temp.next[j]=begin.next[j];
}
i=0;
while (word[i]!='\0')
{
if (temp.next[word[i]-'a']!=NULL)
{
temp=*temp.next[word[i]-'a'];
}
else
{
cout<<-1<<endl;
break;
}
if (word[i+1]=='\0')
{
cout<<temp.valu<<endl;
}
i++;
}
}
}
//释放空间。
return 0;
}