串的模式匹配(7)

2019-07-30 13:07

结点

}

ListInsertfreq(L);//修改出现的次数,即更新链表的第一个结点 ListInsertline(L,line);//修改出现的次数,即更新链表第一个

}

if(i>blength-1) break;

return 0; }

4、主程序和界面设计,菜单设计,主控函数设计如下:

void mandle() {

int xz3=0;

printf(\请选择您的需要(1/2/0):1.单词计数 2.单词子串的定位及计数 0.

退出\\t\\n\

scanf(\ } }

void main() {

int xz1=0,xz2=0;//选择的菜单项 system(\ Enter();

switch(xz3){case 1:Count();break;

case 2:StrPP();break;

case 0:return;

default:printf(\您的要求无法满足,请重选:\\n\

29

system(\ printf(\

printf(\ printf(\这是一个根据数据结构 *\\n\ printf(\的知识设计的小程序,核心算法是串 *\\n\ printf(\的模式匹配算法及串的模式匹配改进KMP算法 *\\n\printf(\ printf(\欢迎进入单词查找系统! *\\n\ printf(\printf(\

printf(\温馨提示:通常串的存储有两种方式:\\n\printf(\定长顺序存储 2.单链表存储\printf(\请选择您想要的存储方式(1/2):\scanf(\if(xz1==1) {

printf(\

printf(\温馨提示:您接下来的有关串的操作都是基于串的定长顺序存储结构!\\n\\n\

//printf(\

do{

printf(\printf(\文本文件的检索、子串的统计及定位 *\\n\printf(\printf(\

printf(\新建文本文件 *\\n\

30

} else { 构!\\n\\n\

} }

printf(\打开文件并匹配 *\\n\printf(\查询历史匹配记录 *\\n\printf(\操作失误,请求退出! *\\n\

printf(\

printf(\请选择:(0-3) \printf(\scanf(\switch(xz2){

case 1:CreateTextFile();break; case 2:mandle();break;

case 3:printf(\此功能尚未实现,请等待升级版!\\n\

case 0:return;

default:printf(\您的要求无法满足,请重选:\\n\}

}while(1);

system(\printf(\

printf(\温馨提示:您接下来的有关串的操作都是基于串的单链表存储结

六、设计和调试分析

⑴在IndexKMP1函数中,函数需要有一个返回值,如下图所示,

31

当删除return返回值,则程序程序出错,如下图所示,

⑵ 在GetNext函数中,给数组next中next[0]赋值为-1,如下图所示,

当其值改为0后,出现函数无法运行的结果。

⑶使用scanf从键盘输入一个值利用一个变量接收时,格式使用错误。如下图所示,

由此导致程序在运行过程中出现异常终止,如图所示,

⑷刚开始程序设计时,由于没有构思好,一味的去写函数,最后把子函数写好后发现很难联系起来,不好调用。所以设计时最好从主函数出发,再根据主函数的需求来编写子函数,这样可以很好的调用函数。

⑸在写getnext函数时,由于书本上的串的存储是从下标为1开始的,而本程序是从下标为0开始。刚开始写函数的时候,由于没有考虑周全,依然从1开始求next数组值,导致结果出现异常。

⑹在代码编写过程中在中文状态下输入字符,如下图所示,

32

运行后程序出现如下图所示的错误,

这是因为在中文状态下输入代码,因此以后在代码的编写过程中要注意细节问题,避免程序运行出错。

⑺在编写IndexKMP2函数时,由于没有深入考虑,简单的认为只要给函数一个返回值就好了,函数设计时如下图所示,

程序运行后发现在运行到一定的位置后就无法运行,程序也无法正常退出,运行结果如下图,程序停在了这个位置无法继续运行,陷入了死循环。

经过进一步的排查,在后面的函数调用中使用到了此处函数的返回值。由于本程序串的存储下标是从0开始,因此函数的返回值就需要有别于书本上在下标是1开始的返回值,因此正确的写法应该是此处需要返回的是一个小于0的数,如-1。

⑻对于文件的操作不熟悉,在读取文本文件中的内容时使用不准确,使用了如图所示的函数,

程序运行后结果如下图所示,

发现程序的运行结果与实际情况有误,经过仔细分析,发现在文件操作函数中

fread()函数和gets()函数有差别,在实际的使用中我们应该根据具体需要选择合适的函数使用,在本程序中应该选择gets函数而不是fread函数。

七、测试结果

33


串的模式匹配(7).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:南开14秋学期《办公自动化基础》在线作业答案

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: