关闭

简化版文本查询类

466人阅读 评论(0) 收藏 举报
分类:












/*



*/
class TextQuery
{
    public:
        typedef string::size_type str_size;
        typedef vector<string>::size_type line_no;
        void read_file(ifstream &is)
        {
           store_file(is); 
           build_map();
        }
        string text_line(line_no line) const
        {
            if(line<line_of_text.size())
                return line_of_text[line];     
            throw out_of_range("line number out of range");
        }
        set<line_no> run_query(const string& query_word) const;
    private:
        void TextQuery::store_file(ifstream& is)
        {
            string textline;
            while(getline(is, textline))
                line_of_text.push_back(textline);
        }

        void build_map()
        {
            for(line_no line_num=0;
                    line_num!=line_of_text.size();
                    ++line_num)
            {
               istringstream line(line_of_text[line_num]); 
               string word;
               while(line>>word)
                   word_map[cleanup_str(word)].insert(line_num);
            }	            
        }
        static string cleanup_str(const string& word)
        {
            string ret;
            for(string::const_iterator it=word.begin();
                    it!=word.end();
                    ++it)
            {
                if(!ispunct(*it))    
                    ret+=tolower(*it);
            }	
            return ret;
        }
        vector<string> line_of_text; 
        map<string,set<line_no> > word_map;
};

set<TextQuery::line_no> 
TextQuery::run_query(const string& query_word) const
{
	string subword(query_word);
    map<string,set<line_no> >::const_iterator
        it=word_map.find(cleanup_str(subword));
    if(it==word_map.end())
        return set<line_no>(); 
    else
        return it->second;
}

void print_results(const set<TextQuery::line_no>& result,
        const string& querytext,const TextQuery &tq)
{
    typedef set<TextQuery::line_no> lines;
    lines::size_type size=result.size();
    cout<<endl<<querytext<<" occurs "
        <<size<<(size>1?" time ":" times ")<<endl; 
    for(lines::const_iterator it=result.begin();
            it!=result.end();
            ++it)
    {
        stringstream istr;
		istr<<"\t"<<"line("<<((*it)+1)<<")";
        cout<<setw(10)<<left<<istr.str();
        cout<<setw(10)<<left<<tq.text_line(*it)<<endl;
    }
    

}

int main(int argc, const char *argv[])
{
    ifstream infile;
    string filename(__FILE__);
    infile.close();
    infile.clear();
    infile.open(filename.c_str());
    TextQuery tq;
    tq.read_file(infile);
    string query_word;
    set<TextQuery::line_no> result;
    while(cin>>query_word && query_word!="q" )
    {
        result=tq.run_query(query_word);
        print_results(result,query_word, tq);
    }
        
    system("pause");
    return 0;
}


0
0
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

C++ Primer 第五版 文本查询程序

新手,代码从官网下载的,自己调试,
  • zhyi0802
  • zhyi0802
  • 2014-05-11 20:03
  • 1451

一个类似JQuery的精简版框架

最近看了一段关于javascript的视频,讲的是一个VQuery.js的框架,这是一个类JQuery框架的缩水版,里面有一些通用的方法,这里记录了下来。VQuery方法是这个框架主要的方法,它接收三...
  • zxc123e
  • zxc123e
  • 2016-09-09 17:33
  • 1554

千呼万唤的ZBrush中文版ZBrushCore终于来了

ZBrushCore是ZBrush 4R7的“简化版”,就其核心而言,ZBrushCore和ZBrush完全一样,其所有功能都能在ZBrush 4R7中找到,特别适合于ZBrush初学者、学生、3D新...
  • supperdesigner
  • supperdesigner
  • 2016-10-09 10:45
  • 9197

Boyer–Moore–Horspool文本匹配算法(BM算法的简化版)

英语里有句习语叫"find a needle in a haystack",译成中文叫"大海捞针"(原意是在一堆干草中寻找一根针)。计算机中的文本匹配(string matching)就是要解决怎样在...
  • ljsspace
  • ljsspace
  • 2011-06-19 13:02
  • 7878

文本语音朗读简化版VC源码(可以生成语音库,可以朗读文本)

  • 2009-12-18 20:58
  • 4.90MB
  • 下载

AS3 没有2D向量类,自己随手写个简化版的先用着

用不着,叉乘、点乘,暂时写这么多,之前自己写的一个比较详细的,放在家了,目前要用这个简化版的: package model { /** * 简化版向量类 * @author Jav...
  • linjf520
  • linjf520
  • 2012-03-21 19:10
  • 827

串口通讯类CSerialPort的BUG修正和简化版

  • 2015-08-28 15:01
  • 4KB
  • 下载

Bootstrap+jq+jqajax+php+数据库增删改查源码(简化版)

今天为大家带来的Bootstrap+jq+jqajax+php+数据库增删改查源码(简化版)。 前台 html lang="zh-CN"> head> meta charset="u...
  • qq_37212162
  • qq_37212162
  • 昨天 10:30
  • 14

击中击不中变换的简化版(其实就是模板匹配)

今天看了击中击不中变换,发现很多地方说的比较模糊,比较常见的说法是: (集合X为原二值化图像的像素集合,对X取反求得~X(非X, Y表示), 选择的结构元为s1, 对结构元s1取反的结构元为s2) ...
  • zhangqinghao0811
  • zhangqinghao0811
  • 2017-07-18 17:29
  • 251

循环链表解决约瑟夫问题(简化版)

约瑟夫环是一个经典的数学的应用问题:已知N个人(以编号1,2,3...N分别表示)围坐在一张圆桌周围。从编号为1的人开始报数,数到M的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列;依此...
  • jw903
  • jw903
  • 2014-08-31 23:10
  • 1733
    个人资料
    • 访问:46753次
    • 积分:747
    • 等级:
    • 排名:千里之外
    • 原创:24篇
    • 转载:28篇
    • 译文:0篇
    • 评论:0条
    文章分类