[关闭]
@buoge 2017-09-28T11:28:59.000000Z 字数 1472 阅读 1027

朴素字符串匹配

模型算法


复习串的朴素模式匹配算法

朴素字符串匹配,为什么说他朴素,因为匹配的过程很”笨“很实诚的一个过程 :)

此处输入图片的描述

  1. int getLength(char *str)
  2. {
  3. int i = 0;
  4. while ('\0' != str[i]) {
  5. i++;
  6. }
  7. return i;
  8. }
  9. int strCompare(char *strMain, char *strSub, int index)
  10. {
  11. int iMain = index;
  12. int jSub = 0;
  13. int lenMain = getLength(strMain);
  14. int lenSub = getLength(strSub);
  15. while ((iMain >= 0 && iMain <= lenMain - 1) && ((jSub >= 0 && jSub <= lenSub - 1))){
  16. if (strMain[iMain] == strSub[jSub]) {
  17. iMain++;
  18. jSub++;
  19. }else{
  20. iMain = iMain - jSub + 1;
  21. // 回到主串的下一个位置起,开始比较,每次重新开始顺次比较,
  22. //[012345678] :主串index
  23. // xyz124abc :主串
  24. // [012] :子串index
  25. // 123 :子串
  26. // 当前主串的回溯位置: 3-0,4-1,5-2 = 3 也就是:iMain - jSub
  27. //回到主串的下一个位置起,开始比较,每次重新开始顺次比较, ij 走的长度是一样的,如果从0开始,那么相减之后,故+1到下一位,如果是从1开始存,那么+2到下一位。
  28. jSub = 0;
  29. }
  30. }
  31. //如果匹配 ok,肯定子串先比完。
  32. if (jSub > lenSub - 1) {
  33. return iMain - lenSub;//得到的就是匹配 ok 后,主串里第一个和模式串第一个字符匹配的字符的位置
  34. }else{
  35. return 0;//匹配失败
  36. }
  37. }
  38. int main(int argc, const char * argv[]) {
  39. char *str1 = "sawtsafvda";
  40. char *str2 = "safv";
  41. int i = strCompare(str1, str2, 0);
  42. printf("%d\n", i);
  43. return 0;
  44. }

http://www.cnblogs.com/kubixuesheng/p/4322410.html

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注