51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 2686|回复: 13
打印 上一主题 下一主题

[原创] 谢谢

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2008-8-24 14:08:43 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式


[ 本帖最后由 dycadrtf 于 2008-8-28 08:55 编辑 ]
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

该用户从未签到

2#
发表于 2008-8-24 18:13:58 | 只看该作者
例子2
[a]something
这个字符串有个两个label:
a
b
按照你的说明,这里面怎会有两个label?
回复 支持 反对

使用道具 举报

该用户从未签到

3#
发表于 2008-8-24 18:14:40 | 只看该作者
好象我不能回帖了?
回复 支持 反对

使用道具 举报

该用户从未签到

4#
发表于 2008-8-25 09:17:49 | 只看该作者
实在不知道你要啥
回复 支持 反对

使用道具 举报

该用户从未签到

5#
发表于 2008-8-25 10:17:01 | 只看该作者
貌似不难,就是做一些字符串的处理,考察点大概就在对于各种可能情况的处理,嗯,再加上异常处理。
回复 支持 反对

使用道具 举报

该用户从未签到

6#
 楼主| 发表于 2008-8-25 10:20:31 | 只看该作者
出鬼了,我例子明明写的是
例子2
[a]something
这个字符串有个两个label:
a
b

怎么显示的不对呢?
哪去了啊?
回复 支持 反对

使用道具 举报

该用户从未签到

7#
 楼主| 发表于 2008-8-25 10:20:44 | 只看该作者
靠,还是没显示出来
回复 支持 反对

使用道具 举报

该用户从未签到

8#
 楼主| 发表于 2008-8-26 09:28:49 | 只看该作者
额,没人帮个忙吗?
回复 支持 反对

使用道具 举报

该用户从未签到

9#
发表于 2008-8-26 10:28:12 | 只看该作者
是否可能出现嵌套的情况,如:[a 2[b6]1c5] 的情况?

[ 本帖最后由 zte_boy 于 2008-8-26 10:29 编辑 ]
回复 支持 反对

使用道具 举报

该用户从未签到

10#
 楼主| 发表于 2008-8-26 14:31:07 | 只看该作者
原帖由 zte_boy 于 2008-8-26 10:28 发表
是否可能出现嵌套的情况,如:[a 21c5] 的情况?


不用考虑的,就假设输入的都是没有嵌套的情况
回复 支持 反对

使用道具 举报

该用户从未签到

11#
发表于 2008-8-26 15:41:43 | 只看该作者
看不懂你的例子
回复 支持 反对

使用道具 举报

该用户从未签到

12#
发表于 2008-8-26 20:27:05 | 只看该作者
原帖由 dycadrtf 于 2008-8-24 14:08 发表
分析一个字符串,分析出字符串中的label情况,被"[]" 包围的字符串就是一个label,一个"[]"中可能包含多个label,以"," 或者 " "(空格)分隔,
如果label是用引号包含的则忽略其中的空格。
例子说明
lable是一个字 ...


写了个例子,lz有需要自己再封装一下好了
  1. Dim arrLabel(1000), iCount, iLabel:iLabel=0
  2. str="[kk]【""aa, ab""】[""b bb"" cd]【cc,dd efg】"
  3. Call RemoveChnSquareBrackets(str)
  4. Call RemoveEngSquareBrackets(str)
  5. Call RemoveQuotationMarks(str)
  6. For iCount = 0 To iLabel-1
  7. WScript.Echo arrLabel(iCount)
  8. Next

  9. Sub RemoveEngSquareBrackets(ByRef strng)
  10. Dim sInd, eInd, subStrng
  11. sInd = InStr(strng, "[")
  12. If sInd = 0 Then
  13.   Exit Sub
  14. Else
  15.   eInd = InStr(sInd+1, strng, "]")
  16.   subStrng = Mid(strng, sInd+1, eInd-sInd-1)
  17.   strng = Left(strng, sInd - 1) & Right(strng, Len(strng) - eInd)
  18.   Call RemoveQuotationMarks(subStrng)  
  19. End If
  20. Call RemoveEngSquareBrackets(strng)
  21. End Sub

  22. Sub RemoveChnSquareBrackets(ByRef strng)
  23. strng = Replace(strng, "【", " ")
  24. strng = Replace(strng, "】", " ")
  25. End Sub

  26. Sub RemoveQuotationMarks(ByRef strng)
  27. Dim sInd, eInd
  28. sInd = InStr(strng, Chr(34))
  29. If sInd = 0 Then
  30.   Call GetSingleLabel(strng)
  31.   Exit Sub
  32. Else
  33.   eInd = InStr(sInd+1, strng, Chr(34))
  34.   arrLabel(iLabel) = Mid(strng, sInd+1, eInd-sInd-1)
  35.   iLabel = iLabel + 1
  36.   strng = Left(strng, sInd - 1) & Right(strng, Len(strng) - eInd)
  37.   Call RemoveQuotationMarks(strng)
  38. End If
  39. End Sub

  40. Sub GetSingleLabel(strng)
  41. Dim arrSplitbySpace, arrSplitByComma, i, j
  42. arrSplitbySpace = Split(strng, " ")
  43. For i = 0 To UBound(arrSplitbySpace)
  44.   arrSplitByComma = Split(arrSplitbySpace(i), ",")
  45.   For j = 0 To UBound(arrSplitbyComma)
  46.    If arrSplitByComma(j) <> "" Then
  47.     arrLabel(iLabel) = arrSplitByComma(j)
  48.     iLabel = iLabel + 1
  49.    End If
  50.   Next
  51. Next
  52. End Sub
复制代码
昨晚朋友催的急,代码只是简单的调试了下,早上来看了看才发现调试的是中间过程,最终的输入都还没改回来~~
代码我得再稍微改改~~
改完了,顺便简单提下思路咯

这道题难点其实就在于各种存在的情况相对较多,将之逐一消除掉就好了
1. 在不考虑[]嵌套的情况下,将【】直接替换为空格即可,然后循环将每对[]中的子字符串找出来,本例中是用的此逻辑;
    若要考虑嵌套,则第1步就要改为:分别搜索第1个"]"和"】",取position值小的那个eInd,再搜索与之匹配的position最大但是小于eInd的sInd,则sInd与eInd之间的就是第一个子字符串,然后删除掉该对中括号及子字符串,递归调用以逐一找出所有配对的中括号及子字符串。
2. 再看子字符串中有没""存在,有的话就直接将每对""中的值存入arrLabel数组中,并删除掉该""及其中内容;
3. 再看子字符串中剩下的还有几个label,分别以" "和","来split,得到不为空的值就都是label

[ 本帖最后由 hsjzfling 于 2008-8-27 11:00 编辑 ]
回复 支持 反对

使用道具 举报

该用户从未签到

13#
 楼主| 发表于 2008-8-27 09:00:32 | 只看该作者
原帖由 没有蛀牙 于 2008-8-26 15:41 发表
看不懂你的例子


有这么难看懂吗?
回复 支持 反对

使用道具 举报

该用户从未签到

14#
发表于 2008-8-27 11:01:56 | 只看该作者
我修改了下在12楼的代码,并补充了点思路~
回复 支持 反对

使用道具 举报

本版积分规则

关闭

站长推荐上一条 /1 下一条

小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

GMT+8, 2024-11-28 10:47 , Processed in 0.068540 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2024 Comsenz Inc.

快速回复 返回顶部 返回列表