zoukankan      html  css  js  c++  java
  • 文本查询程序再探

    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;
        }
    }
  • 相关阅读:
    值传递
    抽象类
    面向对象三大特征(二)--继承
    单例设计模式
    神奇的main方法详解
    面向对象的三大特征 ---- 封装
    变量、方法以及静态和非静态
    面向对象编程-类和对象
    数组
    力扣题库刷题(随时记录)
  • 原文地址:https://www.cnblogs.com/qiusuo/p/5131810.html
Copyright © 2011-2022 走看看