求出子串(模式串)的next函数值,利用kmp算法实现模式与主串的匹配算法

求出子串(模式串)的next函数值,利用kmp算法实现模式与主串的匹配算法,第1张

有两种算法:(len为模式串长度,T[]为模式串)

1、i = 1; j = 0; next[1] = 0;

while(i<len)

{

if((j == 0)||(T[i] == T[j]))

{

i++; j++;

next[i] = j;

}

else

j = next[i];

}

2、i = 1; j = 0; next[1] = 0;

while(i<len)

{

if((j == 0)||(T[i] == T[j]))

{

i++; j++;

if(T[i] != T[j])

next[i] = j;

else

next[i] = next[j];

}

else

j = next[i];

}

总的来说第二种方法相对于第一种方法有改进,因为第一种方法在一些情况下有缺陷,如模式串为"aaaab"时。自己好好体会吧

更新一下之前写的Excel的数据库类,将其改成函数的形式,调用更简单(省却了生成类实例的步骤)。现在这个代码在工作中用了一年多,已经比较健壮。若有问题,请留言指出或与我联系。

这些代码有如下优势:

•无需任何配置。在VBA中新建模块,并把代码复制转帖过去即可使用。

•有以下函数:执行数据库语句、查询数据库、结果复制到单元格(Excel中最常用)、将Excel表格上传到数据库。基本覆盖Excel中对数据库的常用 *** 作。

•会在立即窗口显示数据库错误信息,方便查错。

•在数据库连接字符串字典中配好数据库连接信息后,数据库访问时可直接使用配好的链接字符串。

具体的函数用法已经写在下面代码注释里。简单描述一下:

•dqQueryToArray(sql, connection_string) 查询数据库,返回一个二维数组

•dbQueryOne(sql, connection_string) 查询数据库,返回单个变量。

•dbQueryToCell(sql, range, connection_string, withHeader) 查询数据库后,将结果显示在range开始的区域中;withHeader控制是否显示列名。

•dbExec(sql, necction_string) 执行数据库语句;无返回值

•dbInsertRange(table, range, connection_string, is_empty) 将本Excel文件的range区域里的数据插入到数据库的表table。其中is_empty控制在上传数据前是否清空table的原数据。

其它就看一下代码吧:

' EXCEL的ADO数据库 *** 作函数库

' 这些代码应该放在Excel的VBA模块中,类模块的名字为database,并以以下形式引用:

'

' res = dbQueryToArry(sql, connection_string)

' ' 返回sql的查询结果,结果为一个二维数组

' res = dbQueryOne(sql, connection_string)

' ' 返回sql的查询结果,但只返回第一个数据(相当于数据库查询结果的左上角那个数据)

' dbQueryToCell sql, save_to_range, connection_string, withHeader

' ' 将sql的查询结果直接写入到以save_to_range开头的单元格区域中

' ' withHeader控制是否复制表头,默认为true(复制表头)

'

' 其中参数sql为数据库查询语句,connection_string为数据库连接字符串。

'

' 比如要连接SQL数据库,并已经设置ODBC,连接字符串为:

' "Provider=MSDASQL;DSN=odbc_name;UID=username;PWD=password;database=database_name;"

' 如果未设置ODBC,连接字符串为:

' "driver={SQL Server};server=service_name_or_ip;uid=username;pwd=password;database=database_name;"

' 其中最后面的database变量可省略。对于SQL Server,推荐使用后一种方法。

'

' 如果数据来源为Excel文件,connection_string参数可省略

'

' 其它功能:内置数据库的连接字符串、查询存储过程

'

' Author: zhang@zhiqiangorg, 2014-03-01 v4

' url: >

ResultSetnext()函数返回值强制转换成String是不对的。

因为ResultSet是table(表格),next()方法是将指针从当前位置下移一行。

如果你要返回String,可以:

ResultSet rs=dbexecuteSQL("select faculty from staff where staff_name='"+uid+"'");

String s=null;

while(rsnext()){

//1表示第一个字段,也可以rsgetString("name"),直接写出字段名。

s=rsgetString(1);

outprintln(s);

}

以上就是关于求出子串(模式串)的next函数值,利用kmp算法实现模式与主串的匹配算法全部的内容,包括:求出子串(模式串)的next函数值,利用kmp算法实现模式与主串的匹配算法、如何更新Excel的数据库查询函数库、ResultSet.next()方法的返回值是否可以被强制转换等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/9678104.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-30
下一篇 2023-04-30

发表评论

登录后才能评论

评论列表(0条)

保存