KMP算法
#include <iostream>
#include<string.h>
#include"stdlib.h"
using namespace std;
typedef struct {
char* ch;
}String;
void get_index(String T, int next[]) {
int i = 0, j = -1;
next[0] = -1;
while (i < strlen(T.ch)) {
if (j == -1 || T.ch[i] == T.ch[j]) {
++i, ++j;
next[i] = j;
}
else
j = next[j];
}
}
int Index(String& S, String& T) {
T.ch = (char*)malloc(sizeof(char));
if (!T.ch)
return false;
S.ch = (char*)malloc(sizeof(char));
if (!S.ch)
return false;
cout << "请输入主串:" << endl;
cin >> S.ch;
cout << "请输入子串:" << endl;
cin >> T.ch;
int next[255];
get_index(T, next);
int s = strlen(S.ch);
int t = strlen(T.ch);
int i = -1, j = -1;
while (i <s && j <t) {
if (j == -1 || S.ch[i] == T.ch[j]) {
++i; ++j;
}
else
j = next[j];
}
cout <<"测试:"<<j<<endl;
if (j == strlen(T.ch)) {
int m = i - strlen(T.ch);
cout << "输出:" << m;
}
else
printf("没有找到");
free(T.ch);
free(S.ch);
return true;
}
int main()
{
String S, T;
Index(S, T);
}