vb中vb.net中正则表达式式LenA是什么意思

扫二维码下载作业帮
拍照搜题,秒出答案,一键查看所有搜题记录
下载作业帮安装包
扫二维码下载作业帮
拍照搜题,秒出答案,一键查看所有搜题记录
在VB中“条件表达式的值为0”是什么意思
作业帮用户
扫二维码下载作业帮
拍照搜题,秒出答案,一键查看所有搜题记录
条件表达式的值为0 是指不满足这个条件
为您推荐:
其他类似问题
扫描下载二维码  本人阅读了《编程之美》,参阅了其中的&&计算字符串的相似度&&一节。感觉颇为实用。现将这一文章贴于此处,并将代码赋予其后。
  许多程序会大量使用字符串。对于不同的字符串,我们希望能够有办法判断其相似程度。我们定义了一套操作方法来把两个不相同的字符串变得相同,具体的操作方法为:
    1.修改一个字符(如把&a&替换为&b&)。
    2.增加一个字符(如把&abdd&变为&aebdd&)。
    3.删除一个字符(如把&travelling&变为&traveling&)。
  比如,对于&abcdefg&和&abcdef&两个字符串来说,我们认为可以通过增加/减少一个&g&的方式来达到目的。上面的两种方案,都仅需要一次操作。把这个操作所需要的次数定义为两个字符串的距离,给定任意两个字符串,你是否能写出一个算法来计算出它们的距离?
  分析与解法
  不难看出,两个字符串的距离肯定不超过它们的长度之和(我们可以通过删除操作把两个串都转化为空串)。虽然这个结论对结果没有帮助,但至少可以知道,任意两个字符串的距离都是有限的。
  我们还是应该集中考虑如何才能把这个问题转化成规模较小的同样的问题。如果有两个串A=xabcdae和B=xfdfa,它们的第一个字符是相同的,只要计算A[2,&,7]=abcdae和B[2,&,5]=fdfa的距离就可以了。但是如果两个串的第一个字符不相同,那么可以进行如下的操作(lenA和lenB分别是A串和B串的长度):
    1.删除A串的第一个字符,然后计算A[2,&,lenA]和B[1,&,lenB]的距离。
    2.删除B串的第一个字符,然后计算A[1,&,lenA]和B[2,&,lenB]的距离。
    3.修改A串的第一个字符为B串的第一个字符,然后计算A[2,&,lenA]和B[2,&,lenB]的距离。
    4.修改B串的第一个字符为A串的第一个字符,然后计算A[2,&,lenA]和B[2,&,lenB]的距离。
    5.增加B串的第一个字符到A串的第一个字符之前,然后计算A[1,&,lenA]和B[2,&,lenB]的距离。
    6.增加A串的第一个字符到B串的第一个字符之前,然后计算A[2,&,lenA]和B[1,&,lenB]的距离。
  在这个题目中,我们并不在乎两个字符串变得相等之后的字符串是怎样的。所以,可以将上面6个操作合并为:
    1.一步操作之后,再将A[2,&,lenA]和B[1,&,lenB]变成相同字符串。
    2.一步操作之后,再将A[1,&,lenA]和B[2,&,lenB]变成相同字符串。
    3.一步操作之后,再将A[2,&,lenA]和B[2,&,lenB]变成相同字符串。
  这样,很快就可以完成一个递归程序。
  在以上面的思想完成代码后,对程序进行了一番测试。第一次找了两个相似的字符串,长度分别为15和17。速度和结果都比较满意。这也印证了算法的正确性。第二次找了两个相似的字符串,长度分别为。嗯,直接跳出错误,说是堆栈错误。实际上是由于递归嵌套出了问题。采用递归算法,只是理论上有效,便于理解,实际应用中会出现各种限制。如本例,嵌套约1000层的时候就超过了系统的限制。必须想一个解决之道。仔细观察,可以发现用数学性的语言描述就是
  F(n,m)=G(F(n,m),F(n+1,m),F(n,m+1))
  这个可以简化为递推,由于递推可以放在一个函数内,就解决了系统的递归限制。
  再新代码完成之后,照例还是对代码测试了一番。还是用两个相似的字符串,长度分别为,结果能出来,但是效率差了点。在笔者的电脑上用了6秒中左右。仅仅是比较文本,就要6秒钟,比较难以接受,而且从代码看时间复杂度和空间复杂度都是O(n2)。
  必须得改进!!!
  在看了代码之后,发现代码运行速度慢可能出现在两个地方。一个是mDic对象,用的是Dictionary对象,在运行中反复读取和存储可能会影响速度,如果改为用数组可能效果会好点。哪位对这个有研究的同道,望不吝赐教。一个是String对象的Chars(Index)的方法。可能在每次执行到这一步时,会先把字符串转化为字符数组再返回一个字符,或者是遍历这个字符串,返回一个字符。对于本例中,大约需要执行次,等于反复遍历,时间就浪费了。建议一开始就转化为字符数组,等到比较时就不需要遍历或转化了。
  按照这两个思路对代码进行了修改,然后测试。效果很满意,本例测试几乎就是一瞬间。
  程序完成之后,经测试,结果和速度都令人满意,稍显美中不足的是就是空间复杂度还是比较高,为O(S1&S2),当S1和S2都比较大的时候,可能会占用非常多的空间。
  如何解决这个问题呢?
  经过对计算过程的分析,我发现作为存储的二维矩阵,在每一个循环中,其实只有一行的数据参与了计算,之前的数据行就不再参与计算了。因此,从这个出发点入手,对代码进行了微调,将二维数组改为一维数组。经测试,结果和速度与之前思索之三中的代码没有差异。但空间复杂度少了很多,为O(S1)。
  现将代码赋予其后,用的是VB2005
1 Public Class clsDistance 2
Private mCharA() As Char 3
Private mCharB() As Char 4
Private mCharALen As Integer 5
Private mCharBLen As Integer 6
Public Sub New(ByVal StrA As String, ByVal StrB As String) 8
mCharA = StrA.ToCharArray10
mCharB = StrB.ToCharArray11
mCharALen = mCharA.Length12
mCharBLen = mCharB.Length13 14
End Sub15 16
Public Function CacuDistance() As Integer17
Dim i As Integer18 19
If mCharALen = 0 Then Return mCharBLen20
If mCharBLen = 0 Then Return mCharALen21 22
Dim j As Integer = Min(mCharALen, mCharBLen) - 123
Dim tP1 As Integer, tP2 As Integer24 25
tP1 = -126
tP2 = -127 28
For i = 0 To j29
If mCharA(i) && mCharB(i) Then30
Exit For32
If tP1 = -1 Then Return Math.Abs(mCharALen - mCharBLen)36 37
For i = 0 To j - tP138
If mCharA(mCharALen - i - 1) && mCharB(mCharBLen - i - 1) Then39
Exit For41
If tP2 = -1 Then Return Math.Abs(mCharALen - mCharBLen)45 46
Dim tA(mCharALen - tP1 - tP2) As Integer47 48
For i = 0 To tA.GetUpperBound(0)49
tA(i) = i50
Dim tN1 As Integer, tN2 As Integer, tN3 As Integer53 54
For i = 0 To mCharBLen - tP1 - tP2 - 155
tN1 = tA(0)56
tN2 = tN1 + 157
For j = 1 To tA.GetUpperBound(0)58
If mCharA(mCharALen - tP2 - j) =
_              mCharB(mCharBLen - tP2 - i - 1) Then59
tN3 = tN160
tN3 = Min(tA(j), tN1, tN2) + 162
tA(j - 1) = tN264
tN2 = tN365
tN1 = tA(j)66
tA(tA.GetUpperBound(0)) = tN268
Return tA(tA.GetUpperBound(0))71 72
End Function73 74
Public Function Min(ByVal ParamArray Num() As Integer) As Integer75
Dim tN As Integer, i As Integer76
If Num.Length = 0 Then Return Nothing77
tN = Num(0)78 79
For i = 1 To Num.GetUpperBound(0)80
If Num(i) & tN Then tN = Num(i)81
Return tN84
End Function85 86 &End Class
阅读(...) 评论()VB中Len函数的讨论,谢谢惠顾
编辑:www.fx114.net
本篇文章主要介绍了"VB中Len函数的讨论,谢谢惠顾
0",主要涉及到VB中Len函数的讨论,谢谢惠顾
0方面的内容,对于VB中Len函数的讨论,谢谢惠顾
0感兴趣的同学可以参考一下。
用VB对一个Access数据库中的学生表进行操作,学生表中有一个文本类型,长度为8的字段名为"姓名"的字段,在Access中直接输入此字段值的话,则最多可输入4个汉字或8个字母,如"岛本润一"或"likesoft"均为合法值,而"岛本润一郎"或"likesoftx"都超长,均为不合法值。在用VB对此表进行操作时,对输入姓名的文本框(文本框名为"txt姓名")进行输入长度限定,有以下两种方法:
1.用Len(txt姓名.text)≤8限定
&&&a.&&txt姓名.text="岛本润一",&Len(txt姓名.text)=4≤8,通过VB的长度限定,成功写入Access的学生表中;
&&&b.&&txt姓名.text="&likesoft",&Len(txt姓名.text)=8≤8,通过VB的长度限定,成功写入Access的学生表中;
&&&c.&&txt姓名.text="岛本润一郎",&Len(txt姓名.text)=5≤8,通过VB的长度限定,但超过学生表的"姓名"字段长度8的限定,不能成功写入Access的学生表。
2.用LenB(txt姓名.text)≤8限定
&&&a.&&txt姓名.text="岛本润一",&LenB(txt姓名.text)=8≤8,通过VB的长度限定,成功写入Access的学生表中;
&&&b.&&txt姓名.text="&likesoft",&LenB(txt姓名.text)=16&8,不能通过VB的长度限定,但对于Access的学生表的"姓名"字段应该是合法的;
&&&c.&&txt姓名.text="岛本润一郎",&Len(txt姓名.text)=5≤8,通过VB的长度限定,但超过学生表的"姓名"字段长度8的限定,不能成功写入Access的学生表。
对以上的矛盾,该如何合理的解决,请大家指点。LenB(strconv("luo罗",vbFromUnicode))
結果为5直接设置txt姓名控件的MaxLength为8即可
txt姓名.MaxLength=8
这样txt姓名中就只能最多输入8为字符了,能实现你的功能!主  题:问个VB的问题&:
作  者:gwbasic
军  衔:大校&
功&勋&值:2417&
职  务:
所属论坛:灌水之地
回复次数:15
人气点数:55
发表时间:&16:13:56&
Len("123")&=&3
Len("中国人")&=&3
LenB("中国人")&=&6
LenB("123")&=&6
有什么函数能返回如下结果
"中国人"&=&6
--------------------------------------------------------------------------------
★jinesc★&军衔:YNY 职务:[OOO]&|&回复时间:&16:13:56 &&
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
&坚决不说,死不悔改&
★Jneu★&军衔:一级上将 职务:[你究竟有几个OO妹妹]&|&回复时间:&16:13:56 &&
LenB(StrConv(Str,&vbFromUnicode))
或者使用API函数。
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
&心如止水.......&
★jinesc★&军衔:YNY 职务:[OOO]&|&回复时间:&16:13:56 &&
用&StrConv&函数&转换一下
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
&坚决不说,死不悔改&
★gwbasic★&军衔:大校 职务:[]&|&回复时间:&16:13:56 &&
谢谢两位了
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
★gwbasic★&军衔:大校 职务:[]&|&回复时间:&16:13:56 &&
还有一个问题
用户注册检查&发现用户输入有误,
我要返回上一个页面,让用户重新输入,但想要保存原先的资料,就是不要把from&clear,
我该怎么做?
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
★gwbasic★&军衔:大校 职务:[]&|&回复时间:&16:13:56 &&
是不是ASP里没有StrConv这个函数?
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
★jinesc★&军衔:YNY 职务:[OOO]&|&回复时间:&16:13:56 &&
要不就直接后退&
或者把把东西保存下来用&?xx=aaa&bb=aaa&传到另一个页上去
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
&坚决不说,死不悔改&
★jinesc★&军衔:YNY 职务:[OOO]&|&回复时间:&16:13:56 &&
VB里的,&&ASP中有可能没有的
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
&坚决不说,死不悔改&
★gwbasic★&军衔:大校 职务:[]&|&回复时间:&16:13:56 &&
收到,谢谢
那&是不是ASP里没有StrConv这个函数?
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
★gwbasic★&军衔:大校 职务:[]&|&回复时间:&16:13:56 &&
那有别的办法吗?
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
★jinesc★&军衔:YNY 职务:[OOO]&|&回复时间:&16:13:56 &&
要不就自己写一个,用循环来判断&ASC()的值,以前TTYP写过的
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
&坚决不说,死不悔改&
★gwbasic★&军衔:大校 职务:[]&|&回复时间:&16:13:56 &&
再次感谢,我明白了
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
★gwbasic★&军衔:大校 职务:[]&|&回复时间:&16:13:56 &&
Function&LenA
&&LenA&=&0
&&For&I&=&Len&To&1&Step&-1
&&&&If&Asc(Mid(S,&I,&1))&&&255&Or&Asc(Mid(S,&I,&1))&&&0&Then
&&&&&&LenA&=&LenA&+&2
&&&&&&LenA&=&LenA&+&1
&&&&End&If
End&Function
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
★gwbasic★&军衔:大校 职务:[]&|&回复时间:&16:13:56 &&
Function&LenA(&S&)
&&LenA&=&0
&&For&I&=&Len(&S&)&To&1&Step&-1
&&&&If&Asc(Mid(S,&I,&1))&&&255&Or&Asc(Mid(S,&I,&1))&&&0&Then
&&&&&&LenA&=&LenA&+&2
&&&&&&LenA&=&LenA&+&1
&&&&End&If
End&Function
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
★jinesc★&军衔:YNY 职务:[OOO]&|&回复时间:&16:13:56 &&
呵呵~~&&还真快&LEN是算字符的长度,每个汉字的长度为1
LENB是算字节的长度,每个汉字的长度为2老问题了,把姓名字段的长度调为20,一切ok!to&zengxianfeng:
设置&Maxlength&为8照样能输入8个汉字而实际存储长度为16
最好的办法就是用
LenB(StrConv("luo罗",vbFromUnicode))获得字符串实际存储长度。
---------------------------------------------------------------
十年生死两茫茫。不思量,自难忘。千里孤坟,无处话凄凉。纵使相逢应不识。尘满面,鬓如霜。
夜来幽梦忽还乡。小轩窗,正梳妆。相顾无言,惟有泪千行。料得年年肠断处。明月夜,短松岗。同意楼上!API&function&&lstrlen&can&do&this&to!
一、不得利用本站危害国家安全、泄露国家秘密,不得侵犯国家社会集体的和公民的合法权益,不得利用本站制作、复制和传播不法有害信息!
二、互相尊重,对自己的言论和行为负责。
本文标题:
本页链接:403 Forbidden
403 Forbidden
You don't have permission to access the URL on this server.Powered by Tengine403 Forbidden
403 Forbidden
You don't have permission to access the URL on this server.Powered by Tengine

我要回帖

更多关于 vb.net 正则表达式 的文章

 

随机推荐