lin0308 发表于 2010-8-6 20:12:14

判断无序字符是否相等(已解决)

本帖最后由 lin0308 于 2010-8-7 16:14 编辑

如$a='abc'    $b='bac'
当如果$a='ab',$b='abc'就不相等

谢谢各位高手,问题圆满解决
谢谢,3mile 水木子 大绯狼 C.L 的代码,特别是C.L的代码实在高

水木子 发表于 2010-8-6 20:20:20

本帖最后由 水木子 于 2010-8-6 21:10 编辑

理解错误,不好意思,再想想!

lin0308 发表于 2010-8-6 20:24:55

回复 2# 水木子

你理解错了,$a='321'的话   $B='123',不会相等的

水木子 发表于 2010-8-6 20:27:29

哦!你的意思是不管顺序,只管字符是否相同是吧?

lin0308 发表于 2010-8-6 20:27:52

回复 4# 水木子


    是的

republican 发表于 2010-8-6 20:53:59

正则替换吧。
呼唤Afan的降临!!

这个回复有点水......因为替换模式我不会..

kurey 发表于 2010-8-6 21:28:41

先分解,然后stringinstr

水木子 发表于 2010-8-6 21:42:16

本帖最后由 水木子 于 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:25:02

本帖最后由 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 22:32:19

本帖最后由 水木子 于 2010-8-6 23:42 编辑

回复 9# 3mile

楼主的意思应该是这样的!

abc123 = 213acb

abc123 <> abc124

3mile 发表于 2010-8-6 22:48:56

回复 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

水木子 发表于 2010-8-6 22:57:10

回复 11# 3mile

我用你的方法这样测试,数组超出界限!

$a = "abcdef12345"
$b = "abc123"

3mile 发表于 2010-8-6 23:01:24

回复 12# 水木子
_ArrayPermute的问题。排序数量太大

3mile 发表于 2010-8-6 23:09:57

不知道这样如何?
今天喝了很多酒,太张狂了。同志们不要介意!!!!#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

水木子 发表于 2010-8-6 23:14:34

回复 14# 3mile
看来你真喝了不少呢!有测试吗?
页: [1] 2 3
查看完整版本: 判断无序字符是否相等(已解决)