串的模式匹配

Posted i-chase

tags:

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

给定两个由英文字母组成的字符串 String 和 Pattern,要求找到 Pattern 在 String 中第一次出现的位置,并将此位置后的 String 的子串输出。如果找不到,则输出“Not Found”。

本题旨在测试各种不同的匹配算法在各种数据情况下的表现。各组测试数据特点如下:

  • 数据0:小规模字符串,测试基本正确性;
  • 数据1:随机数据,String 长度为 1,Pattern 长度为 1;
  • 数据2:随机数据,String 长度为 1,Pattern 长度为 1;
  • 数据3:随机数据,String 长度为 1,Pattern 长度为 1;
  • 数据4:随机数据,String 长度为 1,Pattern 长度为 1;
  • 数据5:String 长度为 1,Pattern 长度为 1;测试尾字符不匹配的情形;
  • 数据6:String 长度为 1,Pattern 长度为 1;测试首字符不匹配的情形。

输入格式:

输入第一行给出 String,为由英文字母组成的、长度不超过 1 的字符串。第二行给出一个正整数 N(≤),为待匹配的模式串的个数。随后 N 行,每行给出一个 Pattern,为由英文字母组成的、长度不超过 1 的字符串。每个字符串都非空,以回车结束。

输出格式:

对每个 Pattern,按照题面要求输出匹配结果。

输入样例:

abcabcabcabcacabxy
3
abcabcacab
cabcabcd
abcabcabcabcacabxyz
 

输出样例:

abcabcacabxy
Not Found
Not Found

方法一:

 1 #include <bits/stdc++.h>
 2 char str[1000000];
 3 char str1[1000000];
 4 using namespace std;
 5 int main()
 6 {
 7     cin>>str;
 8     int n;
 9     cin>>n;
10     char *p;
11     for(int i=0;i<n;i++)
12     {
13         cin>>str1;
14         if(p=strstr(str,str1))
15             printf("%s
",p);
16         else
17             printf("Not Found
");
18     }
19 } 

注意:1、include<bits/stdc++.h> 包含所有的可用到的C++库函数,缺点是会增加编译时间,且可能在一些编译器上无法编译,比如MSVC;

   2、strstr(s1,s2);查找s2在s1中第一次出现的位置。

 

方法2:

 

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

数据结构—串KMP模式匹配算法

第四章学习小结 串的模式匹配 解题心得体会

《数据结构(C语言版)》之“串的模式匹配算法”

求出子串(模式串)的next函数值,利用kmp算法实现模式与主串的匹配算法

2016校招真题之串的模式匹配

第四章:2.串 -- 串的模式匹配算法(KMP)