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

串的应用(数组模拟):KMP匹配算法

时间:2014-11-26 01:26:37      阅读:158      评论:0      收藏:0      [点我收藏+]

标签:style   blog   io   ar   color   os   sp   on   div   

 1 //////////////////////////////////////////////////////////
 2 // String.cpp
 3 //
 4 // author:Leetao
 5 //////////////////////////////////////////////////////////
 6 // 简介:
 7 //   串的应用(数组模拟):KMP匹配算法
 8 ////////////////////////////////////////////////////////// 
 9 /**
10 * 
11 *
12 * @author Leetao
13 * @version 1.0
14 * @date 2014.11.26 
15 */ 
16 #include<stdio.h>
17 #include<string.h>
18 
19 #define MAXSIZE 20
20 int next[MAXSIZE];
21  
22 //求模式串t的next函数值并存入数组next中 
23 void get_next(char t[],int next[]) 
24 {
25     int i=1,j=0;
26      next[0]=0;
27     
28     while(i<strlen(t))
29     {
30         if(j==0||t[i-1]==t[j-1])
31         {
32             ++i;
33             ++j;
34             next[i-1]=j;
35         }
36         else j=next[j-1]; 
37     }
38 }
39 
40 //KMP算法 
41 int Index_KMP(char s[],char t[],int pos)
42 {
43     //利用模式串t的next函数求t在主串s中第pos个字符后的位置 
44     int i=pos-1,j=0;
45     
46     while(i<strlen(s)&&j<strlen(t))   
47     {
48         if(j==0||s[i]==s[j])   //  
49         {
50             ++i;
51             ++j;
52         }
53         else j=next[j-1];          //模式串右移 
54     }
55     
56     if(j>strlen(t)) return (i-strlen(t));   //匹配成功 
57     else return 0;
58 }
59 
60 int main()
61 {
62     char s[MAXSIZE],t[MAXSIZE];
63     int i,j,n;
64     
65     printf("please the one string s:\n");
66         gets(s);
67     printf("please the other string t:\n");
68         gets(t);    
69     printf("please enter the starting position:\n");
70         scanf("%d",&n);
71     
72      //get_next
73       get_next(t,next);
74       
75     if(Index_KMP(s,t,n))
76         {
77             printf("匹配成功,起始位置为%d!\n",Index_KMP(s,t,n));
78             
79         }
80     else printf("匹配失败!\n");
81     
82     return 0;
83 }
84  

关于KMP算法见另一随笔

串的应用(数组模拟):KMP匹配算法

标签:style   blog   io   ar   color   os   sp   on   div   

原文地址:http://www.cnblogs.com/leetao94/p/4122274.html

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