研究长字符串快速全文检索技术,实现某电力公司新闻中心新闻稿件全文检索统计系统。
1、 设计实现适合新闻稿件的基础类库
2、 新闻稿件全文检索功能实现
3、 新闻稿件按照关键字统计查询
 
代码如下

Paper.h

 #pragma once
#ifndef PAPER_H
// we're here only if PAPER_H has not yet been defined
#define PAPER_H // Definition of PAPER_H class and related functions goes here
#include <iostream>
#include <string>
#include <vector>
#define For(o,n) for (int i = 0; i < n; i++)
using namespace std;
class Paper {
protected:
int yy, mm, dd;
string unite;
string title;
//there declarations for kinds of news
public:
friend istream& operator >> (istream&, Paper&);
friend ostream& operator <<(ostream&, const Paper &);
Paper();
Paper(const Paper &asp);
virtual ~Paper() {}
void SetYMDear(const int year, const int month, const int day);
int GetYear()const;
int GetMonth()const;
int GetDay()const;
string GetTitle()const;
string GetUnite()const;
void SetUnite(const string Unite);
void SetTitle(const string Title);
virtual int CountWords(const string text) = ;
};
class Word :virtual public Paper {
protected:
string contain;
public:
friend istream& operator >> (istream&, Word&);
friend ostream& operator <<(ostream&, const Word &);
Word();
Word(const string con);
~Word() { }
int CountWords(const string text);
};
class vedio :virtual public Paper {
protected:
string act;
string Vname;
public:
friend istream& operator >> (istream&, vedio&);
friend ostream& operator <<(ostream&, const vedio&);
vedio();
~vedio() {}
vedio(const string ac, const string vn);
string GetAct()const;
string GetVName()const;
int CountWords(const string text);
};
class Record :virtual public vedio {
protected:
string ReName;
public:
friend istream& operator >> (istream&, Record&);
friend ostream& operator <<(ostream&, const Record &);
Record();
~Record() {}
Record(const string re);
int CountWords(const string text);
};
class Poem :virtual public Word {
public:
Poem() {}
~Poem() {}
int CountWords(const string text);
};
class Other :virtual public Word {
public:
Other() {}
~Other() {}
int CountWords(const string text);
};
#endif

Realize.h

 #include"Paper.h"
istream& operator >> (istream&in, Paper&rhp) {
in >> rhp.yy >> rhp.mm >> rhp.dd >> rhp.title >> rhp.unite;
in.ignore();
//getline(in, rhp.contain);
return in;
}
ostream& operator <<(ostream&out, const Paper &rhp) {
out << rhp.yy << endl
<< rhp.mm << endl
<< rhp.dd << endl
<< rhp.title << endl
<< rhp.unite << endl;
// << rhp.contain << endl;
return out;
}
Paper::Paper() :yy(), mm(), dd(), unite("xxx"), title("!!!") {}
Paper::Paper(const Paper &asp) { yy = asp.yy; mm = asp.mm; dd = asp.dd; unite = asp.unite; title = asp.title; }
void Paper::SetYMDear(const int year, const int month, const int day) { yy = year, mm = month, dd = day; }
void Paper::SetTitle(const string Title) { title = Title; }
void Paper::SetUnite(const string Unite) { unite = Unite; }
int Paper::GetDay()const { return dd; }
int Paper::GetYear()const { return yy; }
int Paper::GetMonth()const { return mm; }
string Paper::GetTitle()const { return title; }
string Paper::GetUnite()const { return unite; } istream& operator >> (istream&in, Word&rhp) {
in >> rhp.yy >> rhp.mm >> rhp.dd >> rhp.title >> rhp.unite;
in.ignore();
getline(in, rhp.contain);
return in;
}
ostream& operator <<(ostream&out, const Word &rhp) {
out << rhp.yy << endl
<< rhp.mm << endl
<< rhp.dd << endl
<< rhp.title << endl
<< rhp.unite << endl
<< rhp.contain << endl;
return out;
}
Word::Word() :contain("xxx") { }
Word::Word(const string con) { contain = con; }
int Word::CountWords(const string text) {
int ans = ;
auto pos = contain.find(text);
while (pos != string::npos) {
ans++;
pos = contain.find(text, ++pos);
}
return ans;
}
istream& operator >> (istream&in, vedio&rhp) {
in >> rhp.yy >> rhp.mm >> rhp.dd >> rhp.title >> rhp.unite >> rhp.Vname;
in.ignore();
getline(in, rhp.act);
return in;
}
ostream& operator <<(ostream&out, const vedio &rhp) {
out << rhp.yy << endl
<< rhp.mm << endl
<< rhp.dd << endl
<< rhp.title << endl
<< rhp.unite << endl
<< rhp.act << endl
<< rhp.Vname << endl;
return out;
}
vedio::vedio() :act("xxx"), Vname("XXXX") {}
vedio::vedio(const string ac, const string vn) { act = ac, Vname = vn; }
string vedio::GetAct()const { return act; }
string vedio::GetVName()const { return Vname; }
int vedio::CountWords(const string text) {
int ans = ;
int pos = act.find(text);
while (pos != string::npos) {
ans++;
pos = act.find(text, ++pos);
}
return ans;
}
istream& operator >> (istream&in, Record&rhp) {
in >> rhp.yy >> rhp.mm >> rhp.dd >> rhp.title >> rhp.unite >> rhp.ReName;
in.ignore();
getline(in, rhp.act);
return in;
}
ostream& operator <<(ostream&out, const Record &rhp) {
out << rhp.yy << endl
<< rhp.mm << endl
<< rhp.dd << endl
<< rhp.title << endl
<< rhp.unite << endl
<< rhp.act << endl
<< rhp.ReName << endl;
return out;
}
Record::Record() :ReName("XXXX") {}
Record::Record(const string re) { ReName = re; }
int Record::CountWords(const string text) {
return vedio::CountWords(text);
}
int Poem::CountWords(const string text) {
int ans = ;
string flag = GetTitle();
auto pos = flag.find(text);
while (pos != string::npos) {
ans++;
pos = flag.find(text, ++pos);
}
return ans;
}
int Other::CountWords(const string text)
{
int ans = ;
string flag = GetTitle();
auto pos = flag.find(text);
while (pos != string::npos) {
ans++;
pos = flag.find(text, ++pos);
}
return ans;
}
void ShowSTD() {
cout << "Please input kinds of News in follow fomat." << endl
<< "Word or Poem or Other News:" << endl
<< "Year Month Day Title Unite\nContain(Contain at the end of ENTER)" << endl
<< "vedio or Record News:" << endl
<< "Year Month Day Title Unite Filename\nAbstract(Abstract at the end of ENTER)" << endl;
}

test.cpp

 #include"Realize.h"
int main() {
ShowSTD();
Paper *tp[];
Word a1;
vedio a2;
Record a3;
Poem a4;
Other a5;
string flag;
int n = ;
cout << "\nNow Inpt!!\nWord:";
cin >> a1;
tp[] = &a1;
cout << "vedio:";
cin >> a2;
tp[] = &a2;
cout << "Record:";
cin >> a3;
tp[] = &a3;
cout << "Poem:";
cin >> a4;
tp[] = &a4;
cout << "Other:";
cin >> a5;
tp[] = &a5;
cout << "Please enter the word you want to find:";
cin >> flag;
For(o, n)cout << tp[i]->CountWords(flag) << endl;
cout << endl;
For(o, n)cout << *(tp[i]) << endl;
return ;
}
测试截图如下:
 

C++新闻检索类的更多相关文章

  1. 新闻娱乐类APP的后端核心逻辑总结

    一.主要功能: 用户:登录.注册(微信账号登录.手机号登录).修改.审核 内容:发布.审核.分享.点赞.收藏及置顶热推等相关操作 评论:发布.审核.点赞及热评等相关操作 消息推送:站内信如用户修改结果 ...

  2. hibernate提供的5种检索数据方式

    一.五种检索数据方式 1.OID检索,即使用session.get或session.load通过类及指定id查询数据,如Customer c=(Customer)session.get("C ...

  3. android122 zhihuibeijing 新闻中心NewsCenterPager加载网络数据实现

    新闻中心NewsCenterPager.java package com.itheima.zhbj52.base.impl; import java.util.ArrayList; import an ...

  4. 编写利用Fragment创建新闻列表

    编写利用Fragment创建新闻列表 1.创建新闻实体类News,代码如下:   public class News { private String title; private String co ...

  5. 百度地图LBS云平台读写数据操作类

    最近写了个叫<行踪记录仪>的手机软件,用了百度云来记录每个用户的最近位置,以便各用户能在地图上找到附近的人,为此写了个类来读写数据,大致如下: import java.util.Array ...

  6. 用react开发一个新闻列表网站(PC和移动端)

    最近在学习react,试着做了一个新闻类的网站,结合ant design框架, 并且可以同时在PC和移动端运行: 主要包含登录和注册组件.头部和脚部组件.新闻块类组件.详情页组件.评论和收藏组件等: ...

  7. PYTHON:新闻聚合

    这个项目看了有段时间,因为一直没跑通,而且关于NNTP也不是特别理解.这里是转载code123的分析. 原文地址:http://www.code123.cc/1327.html 书中的第四个练习,新闻 ...

  8. Python3从零开始爬取今日头条的新闻【二、首页热点新闻抓取】

    Python3从零开始爬取今日头条的新闻[一.开发环境搭建] Python3从零开始爬取今日头条的新闻[二.首页热点新闻抓取] Python3从零开始爬取今日头条的新闻[三.滚动到底自动加载] Pyt ...

  9. Fragment在Activity中跳转,实现类似新闻标题跳转新闻内容功能

    1.准备的工作,新闻数据类,新闻数据适配器,适配器的布局: News.java package com.example.zps.fourfragmentbestpractice; /** * Crea ...

随机推荐

  1. C# 获取电脑硬盘剩余空间

    获取本地硬盘的所有剩余空间: 主要应用到System.IO类库的:Driveinfo.Directory,将model转换成json需要用到Newtonsoft.Json.JsonConvert.Se ...

  2. PHP常用的一些数组操作总结

    1.array_values() :返回包含数组中所有键值的数组,不保留键名. 2.array_diff() 函数返回两个数组的差集数组.该数组包括了所有在被比较的数组中,但是不在任何其他参数数组中的 ...

  3. Java集合篇四:Map的基本应用

    package com.test.collection; import java.util.HashMap; import java.util.Hashtable; import java.util. ...

  4. cf547D. Mike and Fish(欧拉回路)

    题意 题目链接 Sol 说实话这题我到现在都不知道咋A的. 考试的时候是对任意相邻点之间连边,然后一分没有 然后改成每两个之间连一条边就A了.. 按说是可以过掉任意坐标上的点都是偶数的数据啊.. #i ...

  5. RDMA in CloudComputing

    https://blog.csdn.net/qq_21125183/article/details/80563463

  6. linux 服务注册 service文件 在service文件中设置变量和环境变量

    [Unit] Description=  #服务描述 After=syslog.target     #服务启动依赖 [Service] Type=forking          #服务启动类型 可 ...

  7. linux c 遍历目录及文件

    #include <dirent.h>void recovery_backend() { DIR * pdir ; struct dirent * pdirent; struct stat ...

  8. xml linq

    这里讲解一下linq对xml的基本操作,包括: 新建xml.新建节点 查询节点 插入属性.插入节点 替换节点 在这里我封装了一些常用的方法: public class XmlHelper { /// ...

  9. March 7 2017 Week 10 Tuesday

    Age is a very high price to pay for maturity. 年纪是成熟的代价. A high price, indeed a high price. It is bes ...

  10. jQuery插件编写步骤详解

    如今做web开发,jquery 几乎是必不可少的,就连vs神器在2010版本开始将Jquery 及ui 内置web项目里了.至于使用jquery好处这里就不再赘述了,用过的都知道.今天我们来讨论下jq ...