串的模式匹配(6)

2019-07-30 13:07

scanf(\

if((fp=fopen(filename,\以读的方式打开文件 { printf(\文件打开失败,按请按任意键退出!\\n\ getch(); exit(0);

}

printf(\请输入要检索的单词:\ scanf(\ T.length=strlen(T.ch); l=0;//行计数器清0 while(!feof(fp)){ fgets(S.ch,MAXSTRLEN,fp);

S.length=lenth(S.ch);//求读入的串的长度 if(feof(fp)) break; l++;//行计数器自增1 k=1;//初始化开始检索位置 i=0;//初始化行单词计数器

while(k

sz[i]=j;//记录匹配单词位置

24

} }

}

}

k=j+T.length;//继续寻下一个子串的检索

if(i>0) { }

printf(\行号:%d,次数:%d,位置分别为:\for(m=1;m<=i;m++) printf(\printf(\

⑶ 在串的链式存储下,利用串的模式匹配KMP算法实现上述功能部分代码如下:

//初始化链表,存储出现的次数和行号 Status IninLinkList(LinkList &L) {

LinkList p,q;

L=(LinkList)malloc(sizeof(Lnode));//头结点

p=(LinkList)malloc(sizeof(Lnode));//第一个节点存储出现次数 q=(LinkList)malloc(sizeof(Lnode));//第二个结点存储第一个行号 if(!L) return(0); L->next=p; L=p; p->next=q; L->data=0; q->data=0; q->next=NULL;

25

return(1); }

//更新链表的第一个结点

Status ListInsertfreq(LinkList &L) {

L->data=L->data+1; return(L->data); }

//更新链表的第二个及其后的结点

Status LinsInsertline(LinkList &L,int line) {

LinkList p,first; first=L;

while(first->next)

first=first->next;

if(line==1) first->data=1;//修改第一个行号结点的值 else if(line!=first->data) { //生成后边几个点

p=(LinkList)malloc(sizeof(Lnode)); first->next=p; p->data=line; p->next=NULL; return(OK);

}

26

else if(line==first->data) return(1); return(1); }

//打印行号

Status printlines(LinkList &head) {

head=head->next; while(head) { if(head->data!=0) printf(\ //将默认行号初始化为0 head=head->next;

}

return(1); }

//求串searchwords的next函数值并存入数组kmp Status getnext(char *searchwords,int *kmp) {

int i=0; int j=-1; int max=0;

max=strlen(searchwords); while(i

if(j==-1||searchwords[i]==searchwords[j])

27

}

{ }

else j=kmp[j];

++i;++j; kmp[i]=j;

return(1); }

//KMP匹配函数,利用模式串searchwords的getnext函数求searchwords在主串buff中的位置

Status Index(char *buff,char *searchwords,LinkList &L,int line,int *kmp) {

int i=0,j=0,k=0; int blength=0,search=0;

blength=strlen(buff);//求主串串长 search=strlen(searchwords);//求模式串串长 while(j<=(search-1)) {

if(j==-1||buff[i]==searchwords[j]) { }

else j=kmp[j];

if(j>search-1)//找出所有关键字的出现次数 {

j=0;

28

++i;++j;


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

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

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

马上注册会员

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