我做的利用字典树实现文本文档索引化程序有些问题,可以帮我看一下吗?
利用字典树实现文本文档索引化(返回单词所在行号),可好像根本无法读入文档,可不可以帮我看看问题出在哪?
void Trie::index()
{
int n=1;
// Trie t;
//t.refresh();
string s,word,filename;
Chain l;
cout<<"输入文件名称:"<<endl;
cin>>filename;
ifstream infile(filename.c_str());
/* if(!infile)
{
cout<<"错误"<<filename<<endl;
cout<<"输入文件名称:"<<endl;
cin>>filename;
ifstream infile(filename.c_str());
} */
while(infile) //好像这就开始错了
{
while(getline(infile,s))
{
istringstream instream(s);
while(instream>>word)
{
transform(word.begin(),word.end(),word.begin(), (int (*)(int))tolower);//大写变小写
const char* r=word.c_str();
// t.insert(r);
//插入单词r
{
TrieNode *p=root;
int i=0;
while(s[i]!='\0')
{
if(p->childs[s[i]-'a']==NULL)
{ TrieNode *temp=new TrieNode();
p->childs[s[i]-'a']=temp;
p=p->childs[s[i]-'a'];}
else
{ p=p->childs[s[i]-'a'];}
i++;}
p->is_terminal=true;//到达尾部,标记一个串
p->l.Append(n);
}
n++;
}
}}
cout<<"输入查找单词:"<<endl;
cin>>word;
transform(word.begin(),word.end(),word.begin(), (int (*)(int))tolower);
const char* r=word.c_str();
//t.search(r,strlen(r));
//查找单词r
{
int a=0;
TrieNode *p=root;
while(*r)
{
if(p->childs[*r-'a'])
{
p=p->childs[*r-'a'];
a++;
if(a==strlen(r)&&p->is_terminal==true)
{
p->l.output();
return ;
a=0;
p=root;
}
r++;
}
else{
if(a==0)
{
r++;
cout<<"当前树为空"<<endl;
return;
}
else
{
a=0;
p=root;
cout<<"未找到单词"<<endl;
return ;
}
}
}
}
}