• 文本查询程序再探


    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;
        }
    }
  • 相关阅读:
    Linux下c开发 之 线程通信(转)
    mount -t nfs 的使用
    window共享linux下的文件 samba
    C/C++ 的使用
    php获取格式时间和时间戳
    php压缩文件夹
    php递归删除文件夹
    php生成文件夹(递归生成)
    QQ音乐API分析记录
    $(this)与this的区别
  • 原文地址:https://www.cnblogs.com/qiusuo/p/5131810.html
Copyright © 2020-2023  润新知