⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 kmp.txt

📁 实现KMP算法。 经典的模式搜索算法。
💻 TXT
字号:
#include <iostream>
#define MAXSIZE 15
using namespace std;

char P[MAXSIZE] = {0};
char T[MAXSIZE] = {0};
int next[MAXSIZE] = {0};
void MyNext(char P[], int next[], int length);

int main()
{
    int i = 1;
    int lengthP = 0;
	int lengthT = 0;

	cout << "Input the long string:" <<endl;
	P[i] = getchar();
    while (P[i] != '\n')
	{
		i++;
		P[i] = getchar();
		lengthP++;
	}
	cout << "The next() is:" << endl; 
    MyNext(P, next, lengthP);
    for (i=1; i<=lengthP; i++)
        cout << next[i];
	cout << endl;

	cout << "Input the shot string:" <<endl;
    T[i] = getchar();
    while (T[i] != '\n')
	{
		i++;
		T[i] = getchar();
		lengthT++;
	}

	return 0;
}

void MyNext(char P[], int next[], int length)
{
    int m = length;
    int k  = 0;
	
	next[1] = 0;
    for (int q=2; q<=m; q++)
    {
        while (k>0 && (P[k+1] != P[q]))
            k = next[k];

		if (P[k+1]==P[q])
			k++;
		
        next[q] = k;
    }
}

int MyKMP(char P[], char T[], int next[], int lengthP, int lengthT)
{
	int n = lengthP;
	int m = lengthT;
	int q = 0;
	
	for (int i=1; i<=n; i++)
	{
		while (q>0 && P[q+1] != T[i])
			q = next[q];

		if (P[q+1] == T[i])
			q++;

		if (q == m)
			cout << "Pattern occurs with shift" << i << endl;

		q = next[q];
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -