词典变位词检索系统课程设计报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
词典变位词检索系统
目录
摘要 (2)
1绪论 (2)
2系统分析 (2)
2.1功能需求 (2)
2.2数据需求 (2)
2.3性能需求 (2)
3总体设计 (2)
3.1系统设计方案.................................................................... 错误!未定义书签。4详细设计 .. (3)
4.1数据结构定义 (3)
4.2读入词典模块 (4)
4.3求出变位词并输出合法单词模块 (6)
4.4循环输入单词模块 (8)
5调试与测试 (8)
5.1调试 (8)
5.2测试 (8)
6结论 (9)
结束语 ......................................................................................... 错误!未定义书签。参考文献 .. (9)
附录1-用户手册 (11)
附录2-源程序 (12)
摘要
本系统的开发是用C语言作为程序开发的工具,利用抽象数据类型,实现单词的变位词检索功能,系统首先处理用户给出的词典文件,之后系统从标准输入函数中反复接受一个单词或字符串的输入,然后系统输出该字符串的所有可能排列和其中形成的合法单词。
本文从分析词典变位词检索系统开发需求出发,描述了系统的总体设计、详细设计、调试和测试等整个系统的设计和实现过程,并对系统的完成情况进行总结。
关键词:单词全排列;合法单词;词典文件
1绪论
词典变位词检索系统就是从词典中查找输入单词的变位词中的合法单词的系统。(扩充)
根据课程设计任务书要求,本系统开发主要完成以下功能和性能。
(1) 处理词典文件:从用户给出的词典文件中读取单词进线性表。
(2)求出变位词并输出合法单词:输入单词后输出单词字母所有可能形成的变位词,即单词的全排列,然后从词典中检索出生成的全排列中的合法单词。
(3)循环输入单词:系统可以循环输入单词进行检索。
2系统分析
2.1 功能需求
本系统主要是从词典中检索出单词变位词的系统。
该系统需要有处理词典、求出变位词并输出合法单词、循环输入单词的功能。
2.2数据需求
根据分析,本系统中主要涉及到的数据为单词。。。。。。扩充
2.3 性能需求
要求性能稳定可靠、运算速度快、安全性能高、方便易懂性、使用合理性、实用性强、可移植性好。
3总体设计
3.1 功能模块设计
词典变位词检索系统分为三个模块,分别为读入词典、求出变位词并输出合法单词、循环输入单词。功能模块图如图1所示。
图1功能模块图
(1) 读入词典模块
读入词典模块,实现从用户给出的词典文件中读入单词进线性表。
(2) 求出变位词并输出合法单词模块
求出变位词并输出合法单词模块,实现输入单词后输出单词字母所有可能形成的变位词,即单词的全排列,并从词典中检索出生成的全排列中的合法单词。
(3) 循环输入单词模块
系统可以循环输入单词进行检索。
3.2 系统设计方案
。。。。。。。。。
4详细设计
词典变位词检索系统主要实现读入词典、求出变位词并输出合法单词、循环输入单词,它们的详细设计和实现过程如下介绍。
4.1 数据结构定义
在本系统中使用了线性表数据结构,结构类型定义如下。
定义词典
typedef char ElemType;
typedef struct Diction
{
ElemType word[100];//单词
struct Diction *next;//指针
}Diction;
4.2读入词典模块
读入词典模块是将用户给出的diction.txt词典文件读入到链式存储结构的顺序表中。
具体实现流程如图2所示。
图2读入词典流程图
读入词典流程图解释如下:
首先定义int k;Diction *head,*p1,*p2;FILE *fp;开辟新结点p1=p2=(Diction *)malloc(sizeof(Diction));令k=0记录单词个数,head=NULL,如果文件打不开输出提示并返回head,如果打开成功,读取一个单词给p1,当k=1时,说明是第一个单词head=p1,p2指向p1,以后循环,每读入一个单词开辟新结点p1,最
后p2->next=NULL,返回head,并输出一共有多少单词。
4.3求出变位词并输出合法单词模块
求出变位词并输出合法单词模块,先对输入的单词进行全排列,每排出一个可能,输出排列,从词典中依次对比看是否为合法单词,如果是则存入新建的单链表中,然后全部输出合法单词。程序流程如图3。
图3 求出变位词并输出合法单词流程图
统计单词字符串的信息,用memset函数将数组空间初始化,m记录字符串长度,n记录字符串中的字符种类数,map记录是哪几种字符,count记录每种字符有多少个。
图4 求出变位词并输出合法单词流程图
用stack记录字符的位置,复制字符数组map中第stack[i]个字符给A[i],同时输出字符,直到第一个可能的单词结束。从词典链表中第一个结点存的单词
开始,依次查找,直到最后一个,如果是合法单词,则新建结点p2,存入这个
单词,直到所有全排列都输出结束后,将存储是合法单词的单链表HEAD带回,在主函数中输出。
4.4循环输入单词模块
循环输入单词模块是用来在输出结果后跳转到“请输入单词”位置,使系统能实现循环输入单词进行检索功能。该功能在主函数中用while(1)循环,printf("输入0继续1退出\n"),输入跳出条件用if判断,break跳出while结束程序来实现。
5调试与测试
5.1 调试
调试过程主要是运行编制好的程序,然后遇到错误后根据系统的提示,找到相关的问题所在。本系统调试过程中遇到问题、原因和解决方法如下面介绍。
(1)程序不能运行
程序运行到输出单词所有的变位词时,出现错误,其原因是指针指向的位置出现错误导致程序传参错乱无法运行,解决办法:使程序进入调试状态在传参出现错误的位置一句一句查找传递的参数是否是你所希望的,如若不是就加以修正。
(2)运行完程序一次有错误提醒
原因是上次运行程序后没有关闭操作界面当点击编译时会有一个错误提示,解决方法:将上一次运行时的操作界面关闭。
(写出你的系统在调试过程中的错误)
5.2 测试
测试数据过程如下:
输入单词:post
此单词的全排列为:opst opts ospt otps otsp post pots psot psto ptos ptso sopt sotp spot spot stop stpo tops tosp tpos tpso tsop tspo
其中是单词的有:
post
spot
stop
输入0继续1退出