VBGood网站全文搜索 Google

搜索VBGood全站网页(全文搜索)

VB爱好者乐园(VBGood)

 找回密码
 立即注册
搜索
查看: 856|回复: 7

[求助] 不用循环,VB如何快速求出长度最长的那个词组及长度?

[复制链接]
发表于 2018-5-28 07:51:28 | 显示全部楼层 |阅读模式
已知字符串   "成人之美哉 来龙去脉 国色天香 八拜之交",里面4个词组分别用空格隔开。
     如果不用循环对比,如何求出:“成人之美哉” 是里面字符长度最长的词组,长度为5?
(以上仅作举例,如果所有词组的长度都相等,则随意取其中一个)
发表于 2018-5-28 10:21:14 | 显示全部楼层
就是人脑,也要把全部看一遍才能判断

评分

参与人数 1威望 +2 人气 +1 收起 理由
bruly + 2 + 1 感谢关注和提醒~!

查看全部评分

回复 支持 1 反对 0

使用道具 举报

发表于 2018-5-28 17:40:36 | 显示全部楼层
  1.     b = Split(a, "成人之美哉 来龙去脉 国色天香 八拜之交")
  2.     m = 0
  3.     For Each i In b
  4.         s = Len(i)
  5.         If s > m Then
  6.             m = s
  7.         End If
  8.     Next
  9.     For Each i In b
  10.         s = Len(i)
  11.         If s = m Then
  12.             Debug.Print i
  13.         End If
  14.     Next
复制代码

点评

更正后的代码见5楼  发表于 2018-5-28 23:28

评分

参与人数 1威望 +8 人气 +1 收起 理由
bruly + 8 + 1 很给力

查看全部评分

回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-5-28 21:48:32 | 显示全部楼层
yiziwuya 发表于 2018-5-28 10:21
就是人脑,也要把全部看一遍才能判断

不知道有没有这么回事,函数中有某个方法,只要列举到数组中,直接得出答案的。我一进找不到它了。
回复 支持 反对

使用道具 举报

发表于 2018-5-28 23:27:36 | 显示全部楼层
  1. b = Split("成人之美哉 来龙去脉 国色天香 八拜之交"," ")
  2.     m = 0
  3.     For Each i In b
  4.         s = Len(i)
  5.         If s > m Then
  6.             m = s
  7.         End If
  8.     Next
  9.     For Each i In b
  10.         s = Len(i)
  11.         If s = m Then
  12.             Debug.Print i
  13.         End If
  14.     Next
复制代码


额 其实楼上代码贴错了,看这个吧

评分

参与人数 1威望 +5 收起 理由
bruly + 5 很给力

查看全部评分

回复 支持 反对

使用道具 举报

发表于 2018-5-29 08:57:39 | 显示全部楼层
Function 最长(字符串 As String) As String
    B = Split(字符串, " ")
    M = 0
    For I = 0 To UBound(B)
        S = Len(B(I))
        If S > M Then
            M = S
            J = I
        End If
    Next
    最长 = B(J)
End Function
回复 支持 反对

使用道具 举报

发表于 2018-6-6 17:04:17 | 显示全部楼层
本帖最后由 admin6677 于 2018-6-6 17:06 编辑

不循环是不可能的了。

  1. Private Function 最长(字符串 As String, 分隔符 As String) As String
  2.   Dim iPos    As Integer, iStart As Integer
  3.   Dim iMax(1) As Integer, iLen   As Integer
  4.   
  5.   字符串 = 字符串 & 分隔符 '防止最后一个字符没分隔符
  6.   iLen = 0
  7.   iStart = 1
  8.       iMax(0) = iStart
  9.       iMax(1) = Len(字符串)
  10.   iPos = InStr(iStart, 字符串, 分隔符)
  11.   While iPos > 0
  12.     If (iPos - iStart) - 1 > iLen Then
  13.       iLen = (iPos - iStart) - 1
  14.       iMax(0) = iStart
  15.       iMax(1) = iPos
  16.     End If
  17.     iStart = iPos + 1
  18.     iPos = InStr(iStart, 字符串, 分隔符)
  19.   Wend
  20.   最长 = Mid$(字符串, iMax(0), iMax(1))
  21. End Function

  22. Private Sub Form_Click()
  23.   Debug.Print 最长("成人之美哉 来龙去脉 国色天香 八拜之交2222", " ")
  24. End Sub
复制代码
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

文字版|手机版|小黑屋|VBGood  

GMT+8, 2018-12-18 20:48

VB爱好者乐园(VBGood)
快速回复 返回顶部 返回列表