C++新闻检索类
研究长字符串快速全文检索技术,实现某电力公司新闻中心新闻稿件全文检索统计系统。
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++新闻检索类的更多相关文章
- 新闻娱乐类APP的后端核心逻辑总结
一.主要功能: 用户:登录.注册(微信账号登录.手机号登录).修改.审核 内容:发布.审核.分享.点赞.收藏及置顶热推等相关操作 评论:发布.审核.点赞及热评等相关操作 消息推送:站内信如用户修改结果 ...
- hibernate提供的5种检索数据方式
一.五种检索数据方式 1.OID检索,即使用session.get或session.load通过类及指定id查询数据,如Customer c=(Customer)session.get("C ...
- android122 zhihuibeijing 新闻中心NewsCenterPager加载网络数据实现
新闻中心NewsCenterPager.java package com.itheima.zhbj52.base.impl; import java.util.ArrayList; import an ...
- 编写利用Fragment创建新闻列表
编写利用Fragment创建新闻列表 1.创建新闻实体类News,代码如下: public class News { private String title; private String co ...
- 百度地图LBS云平台读写数据操作类
最近写了个叫<行踪记录仪>的手机软件,用了百度云来记录每个用户的最近位置,以便各用户能在地图上找到附近的人,为此写了个类来读写数据,大致如下: import java.util.Array ...
- 用react开发一个新闻列表网站(PC和移动端)
最近在学习react,试着做了一个新闻类的网站,结合ant design框架, 并且可以同时在PC和移动端运行: 主要包含登录和注册组件.头部和脚部组件.新闻块类组件.详情页组件.评论和收藏组件等: ...
- PYTHON:新闻聚合
这个项目看了有段时间,因为一直没跑通,而且关于NNTP也不是特别理解.这里是转载code123的分析. 原文地址:http://www.code123.cc/1327.html 书中的第四个练习,新闻 ...
- Python3从零开始爬取今日头条的新闻【二、首页热点新闻抓取】
Python3从零开始爬取今日头条的新闻[一.开发环境搭建] Python3从零开始爬取今日头条的新闻[二.首页热点新闻抓取] Python3从零开始爬取今日头条的新闻[三.滚动到底自动加载] Pyt ...
- Fragment在Activity中跳转,实现类似新闻标题跳转新闻内容功能
1.准备的工作,新闻数据类,新闻数据适配器,适配器的布局: News.java package com.example.zps.fourfragmentbestpractice; /** * Crea ...
随机推荐
- Angular6路由复用与延迟加载的冲突解决——看看有备无患
结论: 结论放最上面,送给匆匆查资料的你: 同时使用延迟加载 + 路由复用,一定不能使用route.routeConfig.path做key去缓存,否则会死得难看. 经实测(我没有完全去解读源代码 ...
- STL库中string类内存布局的探究
在STL中有着一个类就是string类,他的内存布局和存储机制究竟是怎么样的呢? 这就是建立好的string 可以看出,图中用黄色框框标注的部分就是主要区域 我们用来给string对象进行初始化的字符 ...
- JavaScirpt(JS)——DOM文档对象模型
一.HTML DOM介绍 HTML DOM 是 W3C 标准(是 HTML 文档对象模型的英文缩写,Document Object Model for HTML). HTML DOM 定义了用于 HT ...
- 对HTML的大致了解
HTML的全称是Hyper Text Markup Language(超文本标记语言),是一种标记语言.其中,HTML文档一个重要的.广泛使用的标准HTML4.01是在1999年12月24日由W3C组 ...
- Zepto和Jquery区别
---恢复内容开始--- <zepto移动端事件> 1.$("#xx").tap(function(){ //tap在屏幕点击时触发 alert("sssss ...
- onload与ready差异
window.onload: 等所有资源加载完document.ready: DOM树构建完资源还没加载完 应该使用ready保证用户体验.否则当网站有很多图片资源时要很长时间才能加载完这段时间内Js ...
- hibernate 一览表
- flask factory
https://gist.github.com/zaccrites/c5bcf96ed90907d92042 import jinja2 from flask import Flask, render ...
- Linux添加alias简化命令
一.简介 linux alias 是命令的一种别称,输入 alias 可以看到像下面这样的结果: alias vi="vim" 也即,输入vi后,被自动定向到vim这个命令了.al ...
- 2.安装 Android SDK
安装Android SDK Android SDK(Software Development Kit,软件开发工具包)提供了 Android API 库和开发工具构建,测试和调试应用程序.简单来讲,A ...