|
原帖由 dycadrtf 于 2008-8-24 14:08 发表
分析一个字符串,分析出字符串中的label情况,被"[]" 包围的字符串就是一个label,一个"[]"中可能包含多个label,以"," 或者 " "(空格)分隔,
如果label是用引号包含的则忽略其中的空格。
例子说明
lable是一个字 ...
写了个例子,lz有需要自己再封装一下好了- Dim arrLabel(1000), iCount, iLabel:iLabel=0
- str="[kk]【""aa, ab""】[""b bb"" cd]【cc,dd efg】"
- Call RemoveChnSquareBrackets(str)
- Call RemoveEngSquareBrackets(str)
- Call RemoveQuotationMarks(str)
- For iCount = 0 To iLabel-1
- WScript.Echo arrLabel(iCount)
- Next
- Sub RemoveEngSquareBrackets(ByRef strng)
- Dim sInd, eInd, subStrng
- sInd = InStr(strng, "[")
- If sInd = 0 Then
- Exit Sub
- Else
- eInd = InStr(sInd+1, strng, "]")
- subStrng = Mid(strng, sInd+1, eInd-sInd-1)
- strng = Left(strng, sInd - 1) & Right(strng, Len(strng) - eInd)
- Call RemoveQuotationMarks(subStrng)
- End If
- Call RemoveEngSquareBrackets(strng)
- End Sub
- Sub RemoveChnSquareBrackets(ByRef strng)
- strng = Replace(strng, "【", " ")
- strng = Replace(strng, "】", " ")
- End Sub
- Sub RemoveQuotationMarks(ByRef strng)
- Dim sInd, eInd
- sInd = InStr(strng, Chr(34))
- If sInd = 0 Then
- Call GetSingleLabel(strng)
- Exit Sub
- Else
- eInd = InStr(sInd+1, strng, Chr(34))
- arrLabel(iLabel) = Mid(strng, sInd+1, eInd-sInd-1)
- iLabel = iLabel + 1
- strng = Left(strng, sInd - 1) & Right(strng, Len(strng) - eInd)
- Call RemoveQuotationMarks(strng)
- End If
- End Sub
- Sub GetSingleLabel(strng)
- Dim arrSplitbySpace, arrSplitByComma, i, j
- arrSplitbySpace = Split(strng, " ")
- For i = 0 To UBound(arrSplitbySpace)
- arrSplitByComma = Split(arrSplitbySpace(i), ",")
- For j = 0 To UBound(arrSplitbyComma)
- If arrSplitByComma(j) <> "" Then
- arrLabel(iLabel) = arrSplitByComma(j)
- iLabel = iLabel + 1
- End If
- Next
- Next
- End Sub
复制代码 昨晚朋友催的急,代码只是简单的调试了下,早上来看了看才发现调试的是中间过程,最终的输入都还没改回来~~
代码我得再稍微改改~~
改完了,顺便简单提下思路咯
这道题难点其实就在于各种存在的情况相对较多,将之逐一消除掉就好了
1. 在不考虑[]嵌套的情况下,将【】直接替换为空格即可,然后循环将每对[]中的子字符串找出来,本例中是用的此逻辑;
若要考虑嵌套,则第1步就要改为:分别搜索第1个"]"和"】",取position值小的那个eInd,再搜索与之匹配的position最大但是小于eInd的sInd,则sInd与eInd之间的就是第一个子字符串,然后删除掉该对中括号及子字符串,递归调用以逐一找出所有配对的中括号及子字符串。
2. 再看子字符串中有没""存在,有的话就直接将每对""中的值存入arrLabel数组中,并删除掉该""及其中内容;
3. 再看子字符串中剩下的还有几个label,分别以" "和","来split,得到不为空的值就都是label
[ 本帖最后由 hsjzfling 于 2008-8-27 11:00 编辑 ] |
|