上机作业 索引词表的建立
![](/img/avatar.png)
问题: 索引词表的建立
问题简介
根据书名和书号,建立书名关键词到书号的索引词表。
问题理解
需要实现的功能包括:
- 从文件中读入书号和书名
- 计算索引词表
- 向文件输出词表。
从面向对象角度,主要的对象为书籍和关键词。书籍具有书号、书名等属性;关键词具有词条、书号列表等属性。
设计与实现.
程序实现的数据结构
本程序将使用 笔者编写的顺序表、双向链表、字符串类
作为数据结构的实现.
顺序表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
方法,在添加时比较大小,建立有序顺序表。
- 利用