日期:2014-05-16  浏览次数:21024 次

一个比较难的字符串循环判断问?
有一字符串由“B”和“P” 组成 长度不定,它们之间的组合也是随机的,可以说是有无数据个组合。 如:“BPPBBBBPBPPPBPPPBPPPBPPPPPPPPPPPPPP” 当随便改变某一字母它就是另一不同的字符串了。

首先要分解这字符串使每一位独立出来 我是这样写的:

dim str,leng 
str="BPPBBBBPBPPPBPPPBPPPBPPPPPPPPPPPPPP"
leng=len(str)
Dim myArray()
REDIM myArray(leng)
for i=1 to len(txt)
myArray(i)=Mid(txt,i,1)
next

现在得到字符串每一位的内容了 myArray(1),myArray(2),myArray(3),myArray(4).........
不知我这样做得对不对或有没有更好的方法请高人指点。
关键的要求与问题来了:
字符串的第1位与第2,3位比较 
有几种情况:
1、当第1位=第2位 变量X+1  
2、当第1位<>第2位 但 第1位=第3位 变量X也+1
3、当第1位不等于第2位,第1位也不等于 第3位  那么变量X就减3 

然后接着余下字符串作比较 ,关键前面字符串的情况会影响后面字符串比较

如果第1位与第2位比较后是相同的 那么新的一组比较就要从第3位开始

如果第1位不等于第2位后 再要和第3位进行比较, 这时新的一组比较就要从第4位开始了

如果第3位等于第4位的 那么新的一组比较就要从第5位开始了

如果第3位不等于第4位 然后再与每5位进行比较 ,这里新和一组比较就要从第6位开始了

以此类推....直到字符串全比较完.等到最后X的值
关键难点在 新的一组比较会受前面字母组合的影响。
请问这样的循环判断问怎么写呢?请高指点啊!
------解决方案--------------------
你这里应该还得有2个变量:
一个是代表是否开始新的比较
一个是代表比较当前的位置,即保存新的用来比较的原比较字符,打个比方,1和2比较,1和3比较,那么这里的1就是原比较符 如果1和2比较相同了,3就变成了原比较符,如果1和3比较相同的,那么4就是原比较符

比如
b=0 代表继续比较,b=1代表下个循环开始新的比较

------解决方案--------------------

function(bp){
   //匹配操作

   return {
        bp:newbp  //新的要匹配的字符串
        ,x:xvalue //当前匹配的x值
   }   

}

循环上面的方法
------解决方案--------------------
i = 1
while
  if a(i) = a(i+1) then x = x+1, i = i+1
  else if a(i) = a(i+2) then x = x+1, i = i+2
  else x = x-3, i = i+2
loop

------解决方案--------------------
说得并不是很清楚。
dim str,arr(),leng,n,x,i
str="BPPBBBBPBPPPBPPPBPPPBPPPPPPPPPPPPPP"
leng=len(str)
REDIM arr(leng)
for n=1 to leng
arr(n)=Mid(str,n,1)
Next
i=1 '开始判断的下标
x=0 '累积数
Sub fun()
If leng>i And arr(i)=arr(i+1) Then
'1、当第1位=第2位 变量X+1 新的一组比较就要从第3位开始
x=x+1
i=i+3
ElseIf leng>i+1 And arr(i)=arr(i+2) Then
'2、当第1位<>第2位 但 第1位=第3位 变量X也+1 这时新的一组比较就要从第4位开始了
x=x+1
i=i+4
ElseIf leng>i+2 And arr(i)<>arr(i+3) Then
'3、当第1位不等于第2位,第1位也不等于 第3位  那么变量X就减3 新的一组比较就要从第5位开始了
x=x-3
i=i+5
End If
If leng>i Then Call fun()
End Sub
Call fun() '循环调用
Response.write x