首页 > 其他 > 详细

文本查询程序再探

时间:2016-01-14 23:53:23      阅读:315      评论:0      收藏:0      [点我收藏+]

12章后边的文本查询类的定义中定义了一个文本查询程序,这次加入了可以进行或运算、与运算的查询程序。

对于12章的程序来说我修改了QueryResult这个类,添加了两个重载的运算符,分别表示或运算、与运算,这与书上讲的方法并不一样,就我个人看来应该是最直接、简单、容易维护的方法,只是书上用到了面向对象的知识,我只用到了重载。

QueryResult中添加

    QueryResult& operator&(QueryResult& const qr)
    {
        set<line_no> new_set;
        for (auto num : *(lines))
        {
            if (qr.lines->find(num) != (qr.lines)->end())
            {
                new_set.insert(num);
            }
        }
        lines->erase(lines->begin(), lines->end());
        lines->insert(new_set.begin(), new_set.end());
        sought += "&" + qr.sought;
        return *this;
    }
    QueryResult& operator|(QueryResult& const qr)
    {
        lines->insert(qr.lines->begin(), qr.lines->end());
        sought += "|" + qr.sought;
        return *this;
    }

TextQuery中修改

    QueryResult query()const
    {
        static shared_ptr<set<line_no>> nodata(new set<line_no>);
        return (QueryResult("is", wm.find("is")->second, file)
            | QueryResult("are", wm.find("are")->second, file)
            | QueryResult("was", wm.find("was")->second, file)
            | QueryResult("were", wm.find("were")->second, file))
            & (QueryResult("It", wm.find("It")->second, file)
                | QueryResult("it", wm.find("it")->second, file));
    }

runQueries函数修改(用户不能输入了)

void runQueries(ifstream &infile)
{
    TextQuery tq(infile);
    while (true)
    {
        cout << "enter the word to look for, or q to quit:";
        string s;
        if (!(cin >> s) || s == "q") break;
        print(cout, tq.query()) << endl;
    }
}

 

文本查询程序再探

原文:http://www.cnblogs.com/qiusuo/p/5131810.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!