unsigned non: 6; // 未使用 };
union Type { sortTypesort; // 分类型访问 shortwhole; // 整体访问 Type(){whole = 0;} // 构造函数 };
wordNode的词义成员mean是对应每个词性的词义链表MeanList类型的指针数组,数组中每一个元素指向该单词某一个词性的词义链表。该链表中的结点也可以定义为如下结构:
struct wordMean {
stringdepict; // 单词含义描述字串 wordMean* next; // 指向下一个词义 };
要求:
1.使用结构类型wordMean定义一个词义链表类型MeanList用于对单词的某一个词 性类型的词义链表的创建和访问。为此,MeanList应包括如下属性和操作: ①属性:
·链表头属性head:指向词义链表的头结点,因此该属性应该是wordMean
类型的指针。该指针初始化时应为0,表示链表为空。
② 操作:
·构造操作:设置head = 0。 ·析构操作:如果链表不是空,则遍历链表,删除所有结点。
·插入操作Insert:向词义链表中插入一个新词义结点wordMean类型对象。 ·判空操作Empty:根据head的值判定词义链表是否为空(true:空,false:
不空),并返回标志。
·查询操作Contain:查询链表中是否由参数指定的(string类型)词义,如果
存在返回该词义结点的地址,否则返回0。
·显示一条词义操作ItemShow:格式输出显示一个词义结点中词义条目。 ·显示全部词义操作AllShow:格式输出显示链表中的所有词义条目。
2.使用结构类型wordNode定义一个词义链表类型WordList用于对单词的某一个词 性类型的词义链表的创建和访问。为此,WordList应包括如下属性和操作: ①属性:
·链表头属性head:指向词义链表的头结点,因此该属性应该是wordNode
类型的指针。该指针初始化时应为0,表示链表为空。
② 操作:
·构造操作:设置head = 0。 ·析构操作:如果链表不是空,则遍历链表,删除所有结点。
·插入操作Insert:向词义链表中插入一个新词义结点wordNode类型对象。 ·判空操作Empty:根据head的值判定词义链表是否为空(true:空,false:
不空),并返回标志。
·查询操作Contain:查询链表中是否由参数指定的(string类型)词名,如果
存在返回该词义结点的地址,否则返回0。
·显示一条词义操作ItemShow:格式输出显示一个词义结点中词义条目。 ·显示全部词义操作AllShow:格式输出显示链表中的所有词义条目。 由WordList构造的单词链表在物理结构上如下面的示意图所示:
WordList::head name type mean[10] : next MeanList* mean[0].head wordMean结点 depict next depict depict next next MeanList* mean[1].head wordMean结点 depict next MeanList* mean[9].head wordMean结点 depict next depict next name type mean[10] : next
3.在单词链表WordList的基础上派生字典类Dictionary。根据对字典的操作要求, 需要在Dictionary中重新定义和增加的以下操作:
①重新定义字典要求的插入操作Insert:该操作应在WordList::Insert操作的基
础上,禁止相同的单词被插入同一部字典中。注意,如果欲插入的单词已在词典 中,应显示恰当的提示信息。
②查找并显示字典中某类单词子集操作ShowByType:该操作的功能是在字典中 查询所有具有指定词性类型(通过参数传递词性类型)的单词。如果词典中有指 定词性类型的单词,则顺序显示所有被查询到的单词的相关信息(单词名、指定 词性类型的所有词义条目等);如果词典中没有指定词性类型的单词,则显示恰 当的提示信息。
③查找并显示指定词义的同义单词子集操作ShowByMean:该操作的功能是在字 典中查询所有具有指定词义(通过参数传递词义)的单词。如果词典中有指定词 义的单词,则顺序显示所有被查询到的单词的相关信息(单词名、所有满足指定 词义的相关词义条目等);如果词典中没有指定词性类型的单词,则显示恰当的 提示信息。
④显示字典中全部单词信息操作ShowAll:遍历词典中的全部单词结点,并顺序 显示每个单词的全部信息。
4. 在主函数main()中创建一个英汉词典English_Chinese,并通过该词典对象对词典
类Dictionary的各项功能进行如下测试:
①向English_Chinese中插入至少10个单词,每个被插入的单词应具有两种以 上词性类型,每种词性应具有两条以上词义,所有被插入单词的词性种类应覆盖 词典能包括的所有词性类型。注意,在插入操作中应测试是否能禁止相同的单词 被插入。
② 格式显示词典中的所有单词信息。 ③ 通过菜单选择结构,为用户提供按指定的词性或词义查询词典中符合条件的单词
子集的操作功能,直至选择退出操作。 5. 要求编写编程文档,文档内容包括:
①绘制MeanList、WordList和Dictionary类的类图,以及它们之间的静态关联 图。
②MeanList、WordList和Dictionary类的定义描述。
③单词链表WordList的操作Insert以及词典Dictionary的各个操作的算法描述。 ④main()的流程图。
提示:
1.为了使向词典插入单词的程序代码具有良好的结构,建议将要插入的单词信息先组 织成具有确定分段格式的字符串,存放在一个二维字符数组中;然后在一个恰当的 程序结构中顺序对字符数组的每一个单词信息串进行解析,并将解析获得的单词信 息组织成一个完整的单词结点插入词典。所谓具有确定分段格式的单词信息字符串 是将单词的词名、词性、词义信息和各种确定的分隔符,按照一定的语法规则组织 而成。确定组成单词信息字符串的语法规则的原则是无歧义性、易于解析,例如: 单词名{词性名|词义条目|词义条目|…|词义条目}{词性名|词义条目|词义条目|…| 词义条目|}…{词性名|词义条目|词义条目|…|词义条目} 其中分隔符的含义如下: ① 词性分隔符:{和} ② 词义分隔符:|
按照这样的语法规则,单词automatic的信息被组织成如下字符串: automatic{adj|自动的|无意识的}{noun|自动装置|自动枪(或炮)}
2. 使用union类型Type定义wordNode::type的优点是便于高效对该属性访问和使 用。例如,在解析得到单词automatic的词性adj时,便通过type.sort.adj = 1设 置相应的词性特征位;在判断一个单词的词性或顺序显示一个单词的词义时,又可 以提取的词性特征位,确定该单词是否具有该词性,例如,通过type.whole&0x8 提取单词automatic的adj词性特征位。定义一个词性特征位值和词性名之间的映 射:struct map { short eigenvalue; char name[6]; };并使用映射类型定义一个数组: maptype[10] = {{0x1,”noun”},{0x2,”vt”},{0x4,”vi”},{0x8,”adj”},{0x10,”adv”},
{0x11,”prep”},{0x12,”pron”},{0x14,”conj”},{0x18,”inter”},{0x20,”num”}};借助该映 射数组,可以方便地完成从词性特征位获得对应的词性名,或从词性名获得对应的 词性特征位。 难度等级:*****