[已解决]如何比较两个字符串中是否含有相同字符串呢?
本帖最后由 awfymwvf 于 2011-3-3 08:12 编辑如何比较两个字符串中是否含有相同字符串呢?
比如说:有一个字串是:mdfhdcoolddl
另一个字串是:34coolmma
都含有cool这个字串,就返回1,否则就返回0,当然,包括一个和两个相同字母不算,三个连续相同字串才算,
谢谢大家了 $s1="mdfhdcoolddl"
$s2="34coolmma"
_CompSubStr($s1, $s2)
Func _CompSubStr($s1, $s2, $iCompMinLen = 3);$iCompMinLen最短比较长度,本例为3个以上连续字符才比较
Local $iLen1, $i, $j, $sSub
$iLen1 = StringLen($s1)
For $i = 1 To $iLen1
For $j = $iLen1-$i+1 To $iCompMinLen Step -1
$sSub = StringMid($s1, $i, $j)
If StringInStr($s2, $sSub, 0, 1) Then
ConsoleWrite($sSub & @crlf)
Return 1
EndIf
Next
Next
Return 0
EndFunc 首先谢谢楼上的兄弟,可代码没看懂,另外怎么看有没有效呢?
MsgBox(,"aaa",_CompSubStr($s1, $s2))
这个不行。。。呵呵,我是新手,不要见怪啊。再次谢谢兄弟 MsgBox(0,"结果",_CompSubStr($s1, $s2)) 明天测试一下。再次感谢 $s1 = "mdfhdcoolddl"
$s2 = "mdf34cosolmmadadl"
$a = _CompSubStr($s1, $s2)
If $a Then MsgBox(0,0,"存在"&$3&"个或三个以上相同字符")
Func _CompSubStr($s1, $s2, $iCompMinLen = 3);$iCompMinLen 最短比较长度,本例为3个以上连续字符才比较
Local $iLen1, $i, $j, $sSub
$iLen1 = StringLen($s1)
For $i = 1 To $iLen1 + 1 - $iCompMinLen
$sSub = StringMid($s1, $i, $iCompMinLen)
If StringInStr($s2, $sSub, 0, 1) Then
Return 1
EndIf
Next
Return 0
EndFunc ;==>_CompSubStr借用2楼的代码做优化 未作测试。
$a = "mdfhdcoolddl"
$b = "34coolmmamdfh"
MsgBox(0, 0, _stringcomp($a, $b, 3))
Func _stringcomp($a, $b, $number);字符串1,字符串2,最小比较字符
For $n = StringLen($b) To $number Step -1
For $i = 1 To StringLen($b) - $n
If StringInStr($a, StringMid($b, $i, $n)) > 0 Then Return True
Next
Next
Return False
EndFunc
哇,高手全到了。看看谁的代码最强大。测试中。。。。。 测试完成,smartzbs和3mile的代码均测试通过,tryhi朋友的代码运行出错,没有$3这个变量
首先要感谢这三位朋友的付出,
我最后采用了3mile大侠的代码,因为这个代码我看懂了。呵呵。
再次感谢三位兄弟。
页:
[1]