上机作业 索引词表的建立
justaLoli

问题: 索引词表的建立

问题简介

根据书名和书号,建立书名关键词到书号的索引词表。

问题理解

需要实现的功能包括:

  • 从文件中读入书号和书名
  • 计算索引词表
  • 向文件输出词表。

从面向对象角度,主要的对象为书籍和关键词。书籍具有书号、书名等属性;关键词具有词条、书号列表等属性。

设计与实现.

程序实现的数据结构

本程序将使用 笔者编写的顺序表、双向链表、字符串类 作为数据结构的实现. 顺序表vector、双向链表list、字符串string类具有的属性和方法在此不做赘述。

基于问题理解,建立Book类和Keyword类。 其UML图如下.

classDiagram
    class Book{
        +int id;
        +string name;
        +generatekeywords() list 
    }
    class Keyword{
        +string word;
        +list ids;
    }

所有Book存储在vector<Book>顺序表中;所有Keyword存储在vector<Keyword>顺序表中。

程序顺序执行loaddata(string fp), generatekeywordvector(vector<Book>&), dumpdata(std::fstream&,vector<Keywords>)三个函数,完成程序的三个功能。

环境:

g++ -std=c++11. 在MacOS,arm64上测试.

程序输入输出

输入: 从程序运行目录下的filei.txt得到数据.

输出: 输出到程序运行目录下的fileo.txt.输出内容包括词条总数,每个词条对应的书号,以及程序运行时间。

总结

收获: 封装了相对完备的双向链表、线性表、字符串.

遇到的问题与解决办法:

  • 问题:如何将字符串按照字典序排序
  • 解决办法:
    • 利用string.h中的strcmp函数可以按照字典序比大小。
    • string类中重载大于、小于等五个大小判断运算符,让运算符返回strcmp的结果
    • vector类中增加sortappend方法,在添加时比较大小,建立有序顺序表。