码迷,mamicode.com
首页 > 编程语言 > 详细

串的匹配算法之朴素算法

时间:2019-03-22 22:45:44      阅读:197      评论:0      收藏:0      [点我收藏+]

标签:signed   移动   char   style   定义   stdio.h   比较   for   font   

  朴素算法,即不对子串进行预处理。

  利用朴素算法我们可以在主串中寻找子串出现的次数。

代码一:

 

 1 #include <stdio.h>
 2 #include <string.h>
 3 
 4 int Count(char *p, char *q)
 5 {
 6     int i, k, num = 0;
 7     unsigned int j;
 8     for (i = 0; p[i] != \0; i++)
 9     {
10         for (k = i, j = 0; p[k] == q[j] && j < strlen(q); j++, k++)
11             if (j == strlen(q) - 1)
12                 num++;
13     }
14     return num;
15 }
16 int main()
17 {
18     char a[50], b[10];
19     int n;
20     printf("请输入主串: ");
21     gets_s(a,50);
22     printf("请输入子串: ");
23     gets_s(b,10);
24     n = Count(a, b);
25     printf("子串在主串中出现了%d次", n);
26 
27 return 0;
28 
29 }

  代码二:

定义两个指针p,q;p指向主串首地址,q指向子串首地址。

如果对应的字符相等,那么++p,++q,即两个指针都向后移一个单位再继续比较*p和*q,

否则q回到子串的首地址,只把指针p向后移动一个单位。

依次类推,如果*q==‘\0’,说明子串已经终止,子串在主串中出现的次数加1,直到主串终止为止。

  

 1 #include <stdio.h>
 2 
 3 
 4 int Count(char  *str, char  *substr)
 5 {
 6 int n = 0;
 7 char *p, *q;
 8 
 9 while (*str)
10 {
11 p = str;
12 q = substr;
13 while (*q)
14 {
15 if (*p == *q)
16 {
17 ++p;
18 ++q;
19 }
20 else
21 {
22 break;
23 }
24 
25 }
26 if (*q == \0 )
27 {
28 ++n;
29 }
30 ++str;
31 }
32 return n;
33 }
34 
35 int
36 main()
37 {
38 char str[50], substr[10];
39 int n;
40 printf("请输入主串:");
41 gets_s(str);
42 printf("请输入子串:");
43 gets_s(substr);
44 n = Count(str, substr);
45 printf("子串在主串中出现了%d次", n);
46 
47 return 0;
48 }

 

 

 

串的匹配算法之朴素算法

标签:signed   移动   char   style   定义   stdio.h   比较   for   font   

原文地址:https://www.cnblogs.com/mwq1024/p/10581689.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!