c++

#include <iostream>
#include <string>

void computeTemporaryArray();
bool KMP();

int lps[1000];
char pattern[1000];
char text[1000];
int lengthOfPattern;
int lengthOfStr;

int main(){
    printf("hi\n");

    char str[]="abcxabcdabcdabcy";
    char subString[]="abcdabcy";

    //sizeof(subString)-1  == 總包含字元數
    //
    memcpy(pattern,subString,sizeof(subString));
    memcpy(text,str,sizeof(str));

    lengthOfStr=sizeof(str)-1;
    lengthOfPattern=sizeof(subString)-1;


    bool a = KMP();

    printf("%lu\n",sizeof(pattern));
    printf("%s\n",pattern);
    if(a){
        printf("suc!\n");
    }
    else{
        printf("false!\n");
    }

    //bool result=KMP(str,subString);

    return 0;
}
//計算失敗函數
void computeTemporaryArray(){
        int index =0;
        for(int i=1; i < lengthOfPattern;){
            if(pattern[i] == pattern[index]){
                lps[i] = index + 1;
                index++;
                i++;
            }else{
                if(index != 0){
                    index = lps[index-1];
                }else{
                    lps[i] =0;
                    i++;
                }
            }
        }
}
/**
 * KMP algorithm of pattern matching.
*/
bool KMP(){
    computeTemporaryArray();
    int i=0;
  int j=0;
  while(i < lengthOfStr && j < lengthOfPattern){
      if(text[i] == pattern[j]){
        i++;
      j++;
    }else{
        if(j!=0){
          j = lps[j-1];
      }else{
          i++;
      }
    }
  }
  if(j == lengthOfPattern){
      return true;
  }
  return false;
}

results matching ""

    No results matching ""