判断无序字符是否相等(已解决)
本帖最后由 lin0308 于 2010-8-7 16:14 编辑如$a='abc' $b='bac'
当如果$a='ab',$b='abc'就不相等
谢谢各位高手,问题圆满解决
谢谢,3mile 水木子 大绯狼 C.L 的代码,特别是C.L的代码实在高 本帖最后由 水木子 于 2010-8-6 21:10 编辑
理解错误,不好意思,再想想! 回复 2# 水木子
你理解错了,$a='321'的话 $B='123',不会相等的 哦!你的意思是不管顺序,只管字符是否相同是吧? 回复 4# 水木子
是的 正则替换吧。
呼唤Afan的降临!!
这个回复有点水......因为替换模式我不会.. 先分解,然后stringinstr 本帖最后由 水木子 于 2010-8-6 22:12 编辑
相当笨的方法!完全不值得学习的!抛砖引玉吧!$sCompare = _StringContrast('abc123', '123abcdef');需要比较的两个字符串
If $sCompare = '' Then ;返回空,说明两个字符串相同(无顺序的情况)
MsgBox(0, '', '这两个字符串相同')
Else
MsgBox(0, '不同之处:' & $sCompare, '这两个字符串不相同')
EndIf
Func _StringContrast($sString1, $sString2)
Local $sReg
If Number(StringLen($sString1)) >= Number(StringLen($sString2)) Then
$sStringa = $sString2
$sStringb = $sString1
Else
$sStringa = $sString1
$sStringb = $sString2
EndIf
$aString = StringRegExp($sStringa, '.', 3)
For $i = 0 To UBound($aString) - 1
$sReg = StringRegExpReplace($sStringb, $aString[$i], '', 1)
$sStringb = $sReg
Next ;==>ExpRep
Return $sReg
EndFunc ;==>_StringContrast 本帖最后由 3mile 于 2010-8-6 22:30 编辑
是判断相似数吗?还是包括?$a=InputBox("","输入$a")
$b=InputBox("","输入$b")
If $a==$b Then
MsgBox(0,0,"两数相等")
ElseIf StringInStr($a,$b) Then
MsgBox(0,0,"$a包括$b")
ElseIf StringInStr($b,$a) Then
MsgBox(0,0,"$b包括$a")
EndIf 本帖最后由 水木子 于 2010-8-6 23:42 编辑
回复 9# 3mile
楼主的意思应该是这样的!
abc123 = 213acb
abc123 <> abc124 回复 10# 水木子
排序应该可以搞定吧#include <array.au3>
$a="123"
$b="312"
$a_array=StringSplit($a,"")
_ArrayDelete($a_array,0)
$aNewArray = _ArrayPermute($a_array, "")
$b_array=_ArrayFindAll($aNewArray,$b)
If UBound($b_array)>0 Then
MsgBox(0,0,"相似")
else
msgbox(0,0,"不相似")
endif
回复 11# 3mile
我用你的方法这样测试,数组超出界限!
$a = "abcdef12345"
$b = "abc123" 回复 12# 水木子
_ArrayPermute的问题。排序数量太大 不知道这样如何?
今天喝了很多酒,太张狂了。同志们不要介意!!!!#include <array.au3>
Local $z=1
$a="abcdef12345"
$b="2acb31"
$a_array=StringSplit($a,"")
_ArrayDelete($a_array,0)
$b_array=StringSplit($b,"")
_ArrayDelete($a_array,0)
For $i=0 To UBound($b_array)-1
$fin=_ArrayFindAll($a_Array,$b_array[$i])
If UBound($fin)>0 Then $z+=1
Next
If StringLen($b)=$z Then
MsgBox(0,0,"相似")
Else
MsgBox(0,0,"不相似")
EndIf 回复 14# 3mile
看来你真喝了不少呢!有测试吗?