1. /*
2. Copyright (c)2016,烟台大学计算机与控制工程学院
3. All rights reserved.
4. 文件名称:第8周项目5 - 计数的模式匹配.cpp
5. 作 者:朱建豪
6. 完成日期:2016年10月27日
7. 版 本 号:v1.0
8.
9. 问题描述:采用顺序结构存储串,编写一个算法计算指定子串在一个字符串中出现的次数,
10. 如果该子串不出现则为0。
11. 输入描述:两个字符串。
12. 程序输出:子串出现的次数。
13. */
代码:
顺序串算法库
实现函数:
[cpp] view plain copy
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
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算法的不足,更加便于解答问题。