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

📄 stringmarch.cpp

📁 数据结构的转换,包括字符串结构的变换等功能
💻 CPP
字号:
#include "string.h"
#include "StringMarch.h"

StringMarch::StringMarch()
:_StringLength(0)
,_PatternLength(0)
,_String(NULL)
,_Pattern(NULL)
,_NextValue(NULL)
{
}

StringMarch::~StringMarch()
{
	delete [] _String;
	delete [] _Pattern;
	delete [] _NextValue;
}

bool StringMarch::getNextValue()
{
	if(_PatternLength==0)
		return false;

	delete [] _NextValue;
	_NextValue=new int[_PatternLength];

	_NextValue[0]=0;
	for(int i=1,int j=0;i<_PatternLength;i++,j++)
	{
		if(_Pattern[i]==_Pattern[j])
			_NextValue[i]=_NextValue[j];
		else
		{
			_NextValue[i]=j;
			j=-1;
		}
	}

	return true;
}

bool StringMarch::initialize(char *s,char *p)
{
	_StringLength=strlen(s);
	_PatternLength=strlen(p);
	if(_StringLength==0||_PatternLength==0)
		return false;

	delete[] _String;
	delete[] _Pattern;
	_String=new char[_StringLength+1];
	_Pattern=new char[_PatternLength+1];
	strcpy(_String,s);
	strcpy(_Pattern,p);

	return true;
}

int StringMarch::march()
{
	getNextValue();

	for(int i=0,int j=0;i<_StringLength&&j<_PatternLength;)
	{
		if(_String[i]!=_Pattern[j])
		{
			if(j==0)
				i++;
			else
				j=_NextValue[j];

			//if(j==0)
			//	i++;
			//else
			//	j=_NextValue[j];
		}
		
		else
		{
			i++;
			j++;
		}
	}
	if(j==_PatternLength)
		return i-j;
	else
		return -1;
}

⌨️ 快捷键说明

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