C/C++?Qt實(shí)現(xiàn)文章小說人物關(guān)系分析
一、所需工具軟件
1. Visual Stuido
2. C++
二、使用步驟
1.引入庫
代碼如下(示例):
#include "QtGuiApplication1.h" #include<qDebug> #include<QFile> #include <fstream> #include<iostream> using namespace std; #include <sstream> #include <unordered_map>
2.創(chuàng)建元素操作函數(shù)
代碼如下(示例):
//讀取人物名稱 void QtGuiApplication1::readOnButton() { //打開關(guān)鍵詞文件 ifstream ifs; ifs.open("name.txt", ios::in); if (!ifs.is_open()) { cout << "打開文件失敗" << endl; return; } //一行一行讀取到數(shù)組中 string buf; while (getline(ifs, buf)) { cout << buf << endl; QString name = QString::buf); gNameList << name; } ifs.close(); ui.textEdit->setPlainText(gNameList); } //出現(xiàn)次數(shù) void QtGuiApplication1::timesOnButton() { qDebug() << QString::fromLocal8Bit("人名次數(shù)統(tǒng)計(jì)"); //統(tǒng)計(jì)歸零 if (gNameList.size() == 0) { std::cout << "請(qǐng)倒入人名列表后再試!" << std::endl; } gNameCounter.clear(); for (auto name : gNameList) { std::string key = name.toLocal8Bit(); gNameCounter[key] = 0; } //一行行讀入小說 ifstream ifs; ifs.open("天龍八部.txt", ios::in); if (!ifs.is_open()) { cout << "打開文件失敗" << endl; return; } //清空統(tǒng)計(jì)用的TABLE的數(shù)據(jù) gTable.clear(); //統(tǒng)計(jì)結(jié)果顯示到界面 QStringList result; for (auto name : gNameList) { std::string keyword = name.toLocal8Bit(); QString tmp = name + ":" + QString::number(gNameCounter[keyword]); result << tmp; std::cout << keyword << " " << gNameCounter[keyword] << std::endl; } ui.textEdit_3->setText(result.join("\n")); } //篇幅跨度 void QtGuiApplication1::rangeOnButton() { ui.textEdit_3->clear(); for (auto name : gNameList) { std::string keyword = name.toLocal8Bit(); int firstLineNum = -1; int lastLineNum = -1; for (int i = 0; i < gTable.size(); i++) { auto& row = gTable.at(i); //std::cout << "行號(hào):" << i << " "; int KeyWordCounts = row[keyword]; if (KeyWordCounts > 0) { if (firstLineNum == -1) { firstLineNum = i; } lastLineNum = i; } } ui.textEdit_3->append(QString::number(lastLineNum - firstLineNum)); } } //關(guān)系最緊密兩人 void QtGuiApplication1::relationGoodOnButton() { ui.textEdit_3->clear(); qDebug() << "test"; //關(guān)系緊密算法,原理每個(gè)人名在第幾行出現(xiàn)的行數(shù)集合和另一個(gè)人名行數(shù)集合求距離,取最小值為它的精密度 //值越小的那個(gè)為此人和另一個(gè)人的最精密度,然后同樣的方法計(jì)算出此人與其它人的精密度,最終取得 //誰和這個(gè)人最緊密 std::map < std::string, std::vector<int>> DataContainer; //正在對(duì)比的兩個(gè)選手 std::string player1, player2; int theMinDistance = 9999999999999999; for (auto name : gNameList) { std::string keyword = name.toLocal8Bit(); std::vector<int> rowNums; for (int i = 0; i < gTable.size(); i++) { auto& row = gTable.at(i); //std::cout << "行號(hào):" << i << " "; int KeyWordCounts = row[keyword]; if (KeyWordCounts > 0) { rowNums.push_back(i); } } DataContainer[keyword] = rowNums; } ui.textEdit_3->append(QString::number(theMinDistance)+ QStringLiteral("行")); }
三、運(yùn)行結(jié)果
到此這篇關(guān)于C/C++ Qt實(shí)現(xiàn)文章小說人物關(guān)系分析的文章就介紹到這了,更多相關(guān)Qt小說人物關(guān)系分析內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
c++加法高精度算法的簡(jiǎn)單實(shí)現(xiàn)
下面小編就為大家?guī)硪黄猚++加法高精度算法的簡(jiǎn)單實(shí)現(xiàn)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2016-09-09C++ boost 時(shí)間與日期處理詳細(xì)介紹
這篇文章主要介紹了C++ boost 時(shí)間與日期處理詳細(xì)介紹的相關(guān)資料,這里提供實(shí)例代碼,及實(shí)現(xiàn)效果,需要的朋友可以參考下2016-11-11C語言使用廣度優(yōu)先搜索算法解決迷宮問題(隊(duì)列)
這篇文章主要介紹了C語言使用廣度優(yōu)先搜索算法解決迷宮問題,結(jié)合迷宮問題分析了C語言隊(duì)列廣度優(yōu)先搜索算法的相關(guān)使用技巧,需要的朋友可以參考下2017-09-09C語言數(shù)據(jù)結(jié)構(gòu)系列篇二叉樹的概念及滿二叉樹與完全二叉樹
在上一章中我們正式開啟了對(duì)數(shù)據(jù)結(jié)構(gòu)中樹的講解,介紹了樹的基礎(chǔ)。本章我們將學(xué)習(xí)二叉樹的概念,介紹滿二叉樹和完全二叉樹的定義,并對(duì)二叉樹的基本性質(zhì)進(jìn)行一個(gè)簡(jiǎn)單的介紹。本章附帶課后練習(xí)2022-02-02詳解state狀態(tài)模式及在C++設(shè)計(jì)模式編程中的使用實(shí)例
這篇文章主要介紹了state狀態(tài)模式及在C++設(shè)計(jì)模式編程中的使用實(shí)例,在設(shè)計(jì)模式中策略用來處理算法變化,而狀態(tài)則是透明地處理狀態(tài)變化,需要的朋友可以參考下2016-03-03數(shù)據(jù)結(jié)構(gòu)之歸并排序的實(shí)例詳解
這篇文章主要介紹了數(shù)據(jù)結(jié)構(gòu)之歸并排序的實(shí)例詳解的相關(guān)資料,這里對(duì)歸并排序進(jìn)行詳細(xì)介紹,需要的朋友可以參考下2017-08-08