求各位大神帮忙看一下红色代码部分有错没,BF模式匹配和KMP算法。如果红色代码部分没错,图中最后三个按钮如何调用红色部分的代码,跪求

atou1 2016-04-16 11:21:52
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace WindowsFormsApplication1
{
class SqStringClass
{
const int MaxSize = 100;
public char[] data;
public int length;
public SqStringClass()
{
data = new char[MaxSize];
length = 0;

}
public int Index(SqStringClass t)
{

int i = 0,j = 0;
while (i < length && j < t.length)
{ if (data[i] == t.data[j])
{
i++;
j++;
}
else{
i = i-j + 1;
j = 0;
}
}
if(j>=t.length)
return(i - t.length);
else
return(-1);
}

public void GetNext(ref int [] next )
{
SqStringClass t = new SqStringClass();
int j,k;
j=0;k=-1;
next[0]=-1;
while(j<t.length-1)
{ if(k ==-1 || t.data[j] == t.data[k])
{
j++;k++;
next[j]=k;
}
else k = next[k];
}
}

public int KMPIndex(ref int[] next)
{
SqStringClass t = new SqStringClass();
int i = 0,j = 0;
GetNext(ref next);
while(i<length && j<t.length)
{
if(j ==-1 || data[i] ==t.data[j])
{ i++;
j++;
}
else j= next[j];
}
if(j>=t.length)
return(i-t.length);
else
return(-1);
}
public void GetNextval(ref int[] nextval)
{
SqStringClass t = new SqStringClass();
int j, k;
j = 0; k = -1;
nextval[0] = -1;
while (j < t.length - 1)
{
if (k == -1 || t.data[j] == t.data[k])
{
j++; k++;
nextval[j] = k;
}
else k = nextval[k];
}
}
public int KMPIndex1(ref int[] nextval) //修正的KMP算法
{
SqStringClass t = new SqStringClass();
int i = 0, j = 0;
GetNextval(ref nextval);
while(i < length && j < t.length)
{
if(j ==-1 || data[i] ==t.data[j])
{ i++;
j++;
}
else j= nextval[j];

}
if (j >= t.length)
return (i - t.length);
else return(-1);

}


public void StrAssign(string cstr)
{
int i;
for (i = 0; i < cstr.Length; i++)
data[i] = cstr[i];
length = i;
}
public void StrCopy(SqStringClass t)
{
int i;
for (i = 0; i < t.length; i++)
data[i] = t.data[i];
length = t.length;
}
public int StrLength()
{
return length;
}
public SqStringClass Concat(SqStringClass t)
{
SqStringClass nstr = new SqStringClass();
int i;
nstr.length = length + t.length;
for (i = 0; i < length; i++)
nstr.data[i] = data[i];
for (i = 0; i < t.length; i++)
nstr.data[length + i] = t.data[i];
return nstr;
}
public SqStringClass SubStr(int i, int j)
{
SqStringClass nstr = new SqStringClass();
int k;
if (i <= 0 || i > length || j < 0 || i + j - 1 > length)
return nstr;
for (k = i - 1; k < i + j - 1; k++)
nstr.data[k - i + 1] = data[k];
nstr.length = j;
return nstr;
}
public SqStringClass InsStr(int i, SqStringClass s)
{
int j;
SqStringClass nstr = new SqStringClass();
if (i <= 0 || i > length + 1)
return nstr;
for (j = 0; j < i - 1; j++)
nstr.data[j] = data[j];
for (j = 0; j < s.length; j++)
nstr.data[i + j - 1] = s.data[j];
for (j = i - 1; j < length; j++)
nstr.data[s.length + j] = data[j];
nstr.length = length + s.length;
return nstr;
}
public SqStringClass DelStr(int i, int j)
{
int k;
SqStringClass nstr = new SqStringClass();
if (i <= 0 || i > length || i + j - 1 > length)
return nstr;
for (k = 0; k < i - 1; k++)
nstr.data[k] = data[k];
for (k = i + j - 1; k < length; k++)
nstr.data[k - j] = data[k];
nstr.length = length - j;
return nstr;
}
public SqStringClass RepStr(int i, int j, SqStringClass s)
{
int k;
SqStringClass nstr = new SqStringClass();
if (i <= 0 || i > length || i + j - 1 > length)
return nstr;
for (k = 0; k < i - 1; k++)
nstr.data[k] = data[k];
for (k = 0; k < s.length; k++)
nstr.data[i + k - j] = s.data[k];
for (k = i + j - 1; k < length; k++)
nstr.data[s.length + k - j] = data[k];
nstr.length = length - j + s.length;
return nstr;
}
public string DispStr()
{
int i;
string mystr = "";
if (length == 0)
mystr = "空串";
else
{
for (i = 0; i < length; i++)
mystr += data[i].ToString();
}
return mystr;
}

}
}
...全文
100 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

111,129

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧