我做的利用字典树实现文本文档索引化程序有些问题,可以帮我看一下吗?

baidu_27065123 2015-05-07 05:31:56
利用字典树实现文本文档索引化(返回单词所在行号),可好像根本无法读入文档,可不可以帮我看看问题出在哪?
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 ;
}
}
}
}
}
...全文
60 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
baidu_27065123 2015-05-13
  • 打赏
  • 举报
回复
它也不报错,而且检查不出什么问题来,可不可以帮我看一下啊?
baidu_27065123 2015-05-13
  • 打赏
  • 举报
回复
我输入文件名再按回车后,程序就会强行结束

64,652

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧