广告位联系
返回顶部
分享到

C/C++ Qt实现文章小说人物关系分析

C语言 来源:互联网 作者:佚名 发布时间:2023-01-11 21:00:23 人浏览
摘要

一、所需工具软件 1. Visual Stuido 2. C++ 二、使用步骤 1.引入库 代码如下(示例): 1 2 3 4 5 6 7 8 9 10 11 #include QtGuiApplication1.h #includeqDebug #includeQFile #include fstream #includeiostream using namespace

一、所需工具软件

1. Visual Stuido

2. C++

二、使用步骤

1.引入库

代码如下(示例):

1

2

3

4

5

6

7

8

9

10

11

#include "QtGuiApplication1.h"

  

#include<qDebug>

#include<QFile>

  

#include <fstream>

#include<iostream>

using namespace std;

  

#include <sstream>

#include <unordered_map>

2.创建元素操作函数

代码如下(示例):

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128

129

130

131

132

133

134

135

136

137

138

139

140

//读取人物名称

void QtGuiApplication1::readOnButton()

{

    //打开关键词文件

    ifstream ifs;

    ifs.open("name.txt", ios::in);

    if (!ifs.is_open())

    {

        cout << "打开文件失败" << endl;

        return;

    }

  

    //一行一行读取到数组中

    string buf;

    while (getline(ifs, buf))

    {

        cout << buf << endl;

        QString name = QString::buf);

        gNameList << name;

    }

    ifs.close();

  

    ui.textEdit->setPlainText(gNameList);

  

}

  

//出现次数

void QtGuiApplication1::timesOnButton()

{

    qDebug() << QString::fromLocal8Bit("人名次数统计");

  

    //统计归零

    if (gNameList.size() == 0)

    {

        std::cout << "请倒入人名列表后再试!" << 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;

    }

  

    //清空统计用的TABLE的数据

    gTable.clear();

  

    //统计结果显示到界面

    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 << "行号:" << i << " ";

  

            int KeyWordCounts = row[keyword];

            if (KeyWordCounts > 0)

            {

                if (firstLineNum == -1)

                {

                    firstLineNum = i;

                }

  

                lastLineNum = i;

            }

        }

  

  

        ui.textEdit_3->append(QString::number(lastLineNum - firstLineNum));

    }

}

  

//关系最紧密两人

void QtGuiApplication1::relationGoodOnButton()

{

    ui.textEdit_3->clear();

    qDebug() << "test";

  

    //关系紧密算法,原理每个人名在第几行出现的行数集合和另一个人名行数集合求距离,取最小值为它的精密度

    //值越小的那个为此人和另一个人的最精密度,然后同样的方法计算出此人与其它人的精密度,最终取得

    //谁和这个人最紧密

  

    std::map < std::string, std::vector<int>> DataContainer;

    //正在对比的两个选手

    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 << "行号:" << i << " ";

            int KeyWordCounts = row[keyword];

            if (KeyWordCounts > 0)

            {

                rowNums.push_back(i);

            }

        }

        DataContainer[keyword] = rowNums;

    }

  

  

  

    ui.textEdit_3->append(QString::number(theMinDistance)+ QStringLiteral("行"));

  

}

三、运行结果


版权声明 : 本文内容来源于互联网或用户自行发布贡献,该文观点仅代表原作者本人。本站仅提供信息存储空间服务和不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权, 违法违规的内容, 请发送邮件至2530232025#qq.cn(#换@)举报,一经查实,本站将立刻删除。
原文链接 : https://blog.csdn.net/alicema1111/article/details/128599273
相关文章
  • VS及Unity安装和使用Nuget包

    VS及Unity安装和使用Nuget包
    一、百科 Nuget是一个包(package)管理平台,确切的说是.net平台的包管理工具,它提供了一系列客户端用于生成,上传和使用包(package),
  • C/C++ Qt实现文章小说人物关系分析

    C/C++ Qt实现文章小说人物关系分析
    一、所需工具软件 1. Visual Stuido 2. C++ 二、使用步骤 1.引入库 代码如下(示例): 1 2 3 4 5 6 7 8 9 10 11 #include QtGuiApplication1.h #includeqDebug #incl
  • C语言实现三子棋的代码

    C语言实现三子棋的代码
    一、问题描述 用 c 语言实现三子棋。 二、基本流程 在写三子棋的代码之前,我们来看看实现这个游戏的逻辑: 1.菜单界面选择开始或者退
  • C++ system()函数的常用用法(全网最新大全)
    一.推荐: 1. system(pause) 这是萌新最常用的函数了,运行后会有个暂停的效果,在制作游戏的时候也很常见 通常用于暂停或等待用户了解完信
  • vscode调试gstreamer源码的流程介绍

    vscode调试gstreamer源码的流程介绍
    1. 安装vscode插件 C/C++ C/C++ Extension 2. 配置文件修改 vscode中每个项目都有一套配置文件集合,位于.vscode目录下,其中有: tasks.json:编译的相
  • 基于Qt实现电子木鱼小游戏的方法
    今年最火爆的解压小游戏电子木鱼,现在许多软件都上架了这个小程序。我在网上看了一下基本上都是用py和Java写的,所以我用QT重新写了一
  • C++小游戏教程之猜数游戏的实现

    C++小游戏教程之猜数游戏的实现
    0. 引言 本章主要讲解如何做一个简易的猜数游戏,分为用户猜数和系统猜数。 前置芝士: 「C++小游戏教程」基本技巧(1)随机化 1. 用户猜数
  • C++AVL树4种旋转详讲(左单旋、右单旋、左右双旋、

    C++AVL树4种旋转详讲(左单旋、右单旋、左右双旋、
    引子:AVL树是因为什么出现的? 二叉搜索树可以缩短查找的效率,如果数据有序或接近有序二叉搜索树将退化为单支树,查找元素相当于在
  • C++11成员函数作为回调函数的使用方式
    C++11成员函数作为回调函数使用 std::bind()被广泛地应用在新式的回调函数中。 C++11以前类的普通成员函数不能作为回调函数去注册,因为将普
  • C++11, 14, 17对tuple元素的访问介绍
    C++11, 14, 17对tuple元素的访问 std::tuple 作为可以存放任意个数,任意类型的元祖被我个人经常使用。 记得以前看侯捷谈到这个数据结构的时候
  • 本站所有内容来源于互联网或用户自行发布,本站仅提供信息存储空间服务,不拥有版权,不承担法律责任。如有侵犯您的权益,请您联系站长处理!
  • Copyright © 2017-2022 F11.CN All Rights Reserved. F11站长开发者网 版权所有 | 苏ICP备2022031554号-1 | 51LA统计