字符串模式匹配——病毒检测

Posted sanens

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了字符串模式匹配——病毒检测相关的知识,希望对你有一定的参考价值。

实验总结:掌握了字符串的BF匹配算法,在DNA匹配时比较特殊,因为DNA为环状,所以长度要乘以2。

 

 

技术图片
 1 #include<iostream>
 2 #include<cstring>
 3 using namespace std;
 4 #define MAX 100
 5 int m,n; 
 6 int BF(char s[],char p[])
 7 {
 8     int i=1,j=1,t=1;
 9     while(i<=m&&j<=n)
10     {
11         if(s[i]==p[j])
12         {
13             i++;
14             j++;
15         }
16         else
17         {
18             i=++t;//如果不匹配,主串元素往后移 
19             j=1;
20         }
21     }
22     if(j>n)//子串全部匹配成功 
23         return 1;
24     else
25         return 0;
26 }
27 int main()
28 {
29     char a[MAX],b[MAX],s[MAX],p[MAX];
30     while(cin>>b>>a&&a[0]!=0&&b[0]!=0)//输入不等于0时; 
31     {
32         int i,j,flag=0;
33         m=strlen(a);
34         n=strlen(b);
35         for(i=1;i<=m;i++)
36             s[i]=a[i-1];
37         s[m+1]=;
38         for(i=n;i<2*n;i++)//DNA为环状,所以要两倍 
39             b[i]=b[i-n];
40         b[2*n]=;
41         for(i=0;i<n;i++)
42         {
43             for(j=1;j<=n;j++)
44                 p[j]=b[i+j-1];
45             p[n+1]=;
46             if(BF(s,p))
47             {
48                 flag=1;
49                 break;
50             }
51         }
52         if(flag)
53             cout<<"YES"<<endl;
54         else
55             cout<<"NO"<<endl;
56     }
57     return 0;
58 }
View Code

 

以上是关于字符串模式匹配——病毒检测的主要内容,如果未能解决你的问题,请参考以下文章

[bzoj1966][Ahoi2005][VIRUS 病毒检测] (字符串dp)

字符串匹配算法 之BFKMP

[AHOI2005] 病毒检测 - Trie,BFS

静态分析基础技术

用字符串中的任何字符查找任何数字和空格的匹配模式并替换为 |在 PHP [关闭]

免杀技术