C++ STL子序列匹配

来源:互联网 发布:上海谷歌优化公司 编辑:程序博客网 时间:2024/06/05 06:43

#include <iostream>
#include <string>
#include <vector>
#include <iterator>
#include <algorithm>
#include <list>
#include <set>
#include <cstdlib>
using namespace std;


template <class Integer>

struct congruent
{
 congruent(Integer mod)
 {
  N=mod;
 }
 bool operator()(Integer a,Integer b)const
 {
  return (a-b)%N==0;
 }
 Integer N;
};

int main()
{
 const char s1[]="Hello,world!";
 const char s2[]="world";
 const int N1=strlen(s1);
 const int N2=strlen(s2);

 const char* p=search(s1,s1+N1,s2,s2+N2);
 if(p!=s1+N1)
  cout<<p-s1<<endl;
 else
  cout<<"error"<<endl;

 /**************带条件的search*****************************/
 int A[10]={23,46,81,2,43,19,14,98,72,51};
 int digits[3]={1,2,3};

 int* seq=search(A,A+10,digits,digits+3,congruent<int>(10));//???执行过程
 if(seq!=A+10)
  cout<<seq-A<<endl;
 else
  cout<<"error"<<endl;

 /**************find_end()查找最后匹配的字符串*****************************/
 char* s="executable.exe";
 char* suffix="exe";

 const int N=strlen(s);
 const int N_suf=strlen(suffix);

 char* location=find_end(s,s+N,suffix,suffix+N_suf);

 if(location!=s+N)
  cout<<location-s<<" "<<location<<endl;

 

 return 0;
}

原创粉丝点击