Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<iostream>
- #include<string.h>
- using namespace std;
- int fun(int sk,char tk,int TF[][256]);
- enum state{Q0,Q1,Q2,Q3,Q4,Q5,P};
- int main(){
- char *txt="ccccaabaaa";
- char *pat="aabaaa";
- int num_of_char=2;
- int PL=strlen(pat);
- int N=strlen(txt);
- int TF[PL][256];
- for(int i=0;i<PL;i++){
- for(int j=0;j<=num_of_char;j++){
- if(i==0 and j==0){
- TF[i][j]=Q1;
- }else if(i==0 and j==1){
- TF[i][j]=Q0;
- }//
- else if(i==1 and j==0){
- TF[i][j]=Q2;
- }else if(i==1 and j==1){
- TF[i][j]=Q0;
- }//
- else if(i==2 and j==0){
- TF[i][j]=Q2;
- }else if(i==2 and j==1){
- TF[i][j]=Q3;
- }//
- else if(i==3 and j==0){
- TF[i][j]=Q4;
- }else if(i==3 and j==1){
- TF[i][j]=Q0;
- }//
- else if(i==4 and j==0){
- TF[i][j]=Q5;
- }else if(i==4 and j==1){
- TF[i][j]=Q0;
- }//
- else if(i==5 and j==0){
- TF[i][j]=P;
- }else if(i==5 and j==1){
- TF[i][j]=Q3;
- }
- else{
- TF[i][j]=Q0;
- }
- }
- }
- int k=1,sk=Q0,i=0;
- //cout<<tk<<endl;
- while(sk!=P and k<=N){
- char tk=txt[i];
- i++;
- sk=fun(sk,tk,TF);
- k++;
- if(sk==P){
- cout<<"found at "<<k-PL<<endl;
- }
- }
- }
- int fun(int sk,char tk,int TF[][256]){
- if(tk=='a'){
- return TF[sk][0];
- }else if(tk=='b'){
- return TF[sk][1];
- }else{
- return 0;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement