第八周项目5-计数的模式匹配

本文介绍了一种基于顺序结构的简单计数模式匹配算法,该算法用于计算一个子串在一个字符串中出现的次数。通过逐步匹配主串和子串中的字符来实现,如果匹配成功,则记录并继续搜索。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  1. /*        
  2. Copyright (c)2016,烟台大学计算机与控制工程学院        
  3. All rights reserved.        
  4. 文件名称:第8周项目5 - 计数的模式匹配.cpp        
  5. 作    者:陈晓琳        
  6. 完成日期:2016年10月21日        
  7. 版 本 号:v1.0        
  8.         
  9. 问题描述:采用顺序结构存储串,编写一个算法计算指定子串在一个字符串中出现的次数,  
  10.           如果该子串不出现则为0。  
  11. 输入描述:两个字符串。  
  12. 程序输出:子串出现的次数。  
  13. */    
代码:

顺序串算法

实现函数:

[cpp]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. int str_count(SqString s,SqString t)    
  2. {    
  3.     int i=0,j=0,count=0;    
  4.     while (i<s.length && j<t.length)    
  5.     {    
  6.         if (s.data[i]==t.data[j])   //继续匹配下一个字符    
  7.         {    
  8.             i++;                //主串和子串依次匹配下一个字符    
  9.             j++;    
  10.         }    
  11.         else                    //主串、子串指针回溯重新开始下一次匹配    
  12.         {    
  13.             i=i-j+1;            //主串从下一个位置开始匹配    
  14.             j=0;                //子串从头开始匹配    
  15.         }    
  16.         //在BF算法中,没有下面的这一部分    
  17.         //这里增加一个判断,可以“捕捉”到已经产生的匹配    
  18.         if (j>=t.length)        //如果j已经达到了子串的长度,产生了一个匹配    
  19.         {    
  20.             count++;            //匹配次数加1    
  21.             i=i-j+1;            //主串从下一个位置开始继续匹配    
  22.             j=0;                //子串从头开始匹配    
  23.         }    
  24.     }    
  25.     return(count);    
  26. }    
main函数:

[cpp]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. #include <stdio.h>    
  2. #include "sqString.h"    
  3. int main()    
  4. {    
  5.     SqString s,t;    
  6.     StrAssign(s,"accaccacacabcacbab");    
  7.     StrAssign(t,"accac");    
  8.     printf("s:");    
  9.     DispStr(s);    
  10.     printf("t:");    
  11.     DispStr(t);    
  12.     printf("%d\n",str_count(s,t));    
  13.     return 0;    
  14. }    
运行结果:


知识点总结:

b-f算法与kmp算法的实现与改进。

学习心得:

kmp算法填补了b-f算法的不足,更加便于解答问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值