结点
}
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