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

📄 withdfa.cpp

📁 多种字符串匹配算法 多种字符串匹配算法
💻 CPP
字号:
// withDFA.cpp: implementation of the withDFA class.
//
//////////////////////////////////////////////////////////////////////

#include "withDFA.h"
#include <string.h>

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

withDFA::withDFA()
{}

withDFA::~withDFA()
{}


void withDFA::test()
{
	TimeIt tt;
	withDFA dfa;
	dfa.search();
	dfa.OUTPUT(tt.GetMSecElapsed());
}

void withDFA::preAut(char *x, int m, Graph* aut) 
{
	int i, state, target, oldTarget;

	for (state = aut->getInitial(), i = 0; i < m; ++i) {
		oldTarget = aut->getTarget(state, x[i]);
		target = aut->newVertex();
		aut->setTarget(state, x[i], target);
		aut->copyVertex(target, oldTarget);
		state = target;
	}
	aut->setTerminal(state);
}
 

// 2006-02-13 dx
#define ASIZE		5
 
void withDFA::search() 
{
	char *x = (char*)m_search,
		 *y = (char*)m_context;
	int m = strlen(m_search), 
		n = strlen(m_context);

	int j, state;
	Graph* aut;

	/* Preprocessing */
	aut = Graph::newAutomaton(m + 1, (m + 1)*ASIZE);
	preAut(x, m, aut);

	/* Searching */
	for (state = aut->getInitial(), j = 0; j < n; ++j) {
		state = aut->getTarget(state, y[j]);
		if (aut->isTerminal(state))
			OUTPUT(j - m + 1);
	}
}

⌨️ 快捷键说明

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