文本查询 没写完代码

本文介绍了一个文本查询系统的实现方法,该系统能够将文本文件的每一行存储到内存中,并记录每个单词出现的行号,最后可以根据指定单词输出含有该单词的所有行。通过使用C++标准库中的数据结构如vector、map和set等,实现了高效的数据管理和检索。

//文本查询

// 要做的事情 1、把一个文本 的每一行 放入 vector 中。

//  2、记录每一个单词的行号

//  3、根据行号输出每行单词。

 

class TextQuery

{

public:

typedef vector<string>::size_type line_no;

 

void store_file( ifstream& is);

 

set<line_no> print_lineno(string& )const;

 

string print_linestring(line_no)const ;

 

private:

 

vector<string>line_of_text;

 

map<string , set<line_no> >word_map;

};

 

void TextQuery::store_file(ifstream& is)

{

string word;

while ( getline( is,word ) )

{

line_of_text.push_back(word);

}

 

line_no num;

for( num=0; num != line_of_text.size(); ++num )

{

string line, tempword;

istringstream istream(line_of_text[num]);

while ( istream>> word)

{

word_map[word].insert(num);

}

}

 

}

 

 

set<line_no> TextQuery::print_lineno(string& str)

{

map<string, set<line_no> >::iterator iter = word_map.find(str);

if (iter == word_map.end())

{

return set<line_no>();

}

return iter->second;

}

 

string TextQuery::print_linestring(line_no num)

{

if ( num< line_of_text.size())

{

return line_of_text[num];

}

}

 

void print_result(const set<TextQuery::line_no>& los, const string& str, const TextQuery & textclass)

{

cout<<"str:"<<str<<"total num:"<<los.size()<<endl;

set<TextQuery::line_no>::iterator iter=los.begin();

for (; iter != los.end();++iter)

{

cout<< *iter+1 <<textclass.print_linestring(*iter)<<endl;

}

}

 

void main( void )

{

}

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值