本帖最后由 aa77dd@163.com 于 2015-8-8 00:15 编辑
只适用于元素全是 1 位数的- Dim arrStr
- arrStr = Split("0,1,2,3,4,5,6,7,8,9", ",")
-
- offs = -10086
-
- slen = len(join(arrStr, ""))
-
- msgbox "原字符串:" & Join(arrStr, ",") & vbCrLf _
- & "偏移" & offs & ":" & _
- join(split(mid(join(arrStr, ";") & ";" & join(arrStr, ";"), 2*(1 + (offs mod slen + slen) mod slen)-1, 2*slen-1), ";"), ",")
复制代码 通用的
算法在时间和空间消耗上是矛盾的, 以时间换空间:- 'ArrShift.vbs
- Dim arrStr, sInfo
- arrStr = Split("0,1,2,3,4,5,6,7,8,9", ",")
- sInfo = "原字符串:" & Join(arrStr, ",") & vbCrLf
- sInfo = sInfo & "偏移+2:" & Join(ArrShift(arrStr, 2), ",") & vbCrLf
- sInfo = sInfo & "偏移-2:" & Join(ArrShift(arrStr, -2), ",") & vbCrLf
- sInfo = sInfo & "偏移+10086:" & Join(ArrShift(arrStr, 10086), ",") & vbCrLf
- sInfo = sInfo & "偏移-10086:" & Join(ArrShift(arrStr, -10086), ",") & vbCrLf
- MsgBox sInfo
-
- Function ArrShift(ByVal arrStr, ByVal nShift)
- Dim i, t, a_len, tmp
-
- a_len = UBound(arrStr) + 1
- rem nShift 去符号
- nShift = (nShift mod a_len + a_len)
-
- for t = 1 to nShift step 1
- tmp = arrStr(0)
- For i = 0 To UBound(arrStr) - 1 Step 1
- arrStr(i) = arrStr( i + 1 )
- next
- arrStr(UBound(arrStr)) = tmp
- next
-
- ArrShift = arrStr
- End Function
复制代码
|