【问题标题】:Monster Search - Loop (string search + integer insert)Monster Search - 循环(字符串搜索 + 整数插入)
【发布时间】:2020-11-01 08:00:30
【问题描述】:

我有一个名为 strMonsterEssay 的大字符串(超过 255 个字符)。

在这篇文章中重复了一个字符串字符,其格式与 Monster X 完全相同,我希望能够找到最大的怪物编号。整篇文章中都有怪物 1、怪物 2...怪物 X。注意,最多可能有 99 个怪物。

在代码的最后,我希望能够说“有 25 个怪物”之类的话。

我不知道在“喜欢”搜索循环中输入整数的语法。这是我到目前为止的代码,希望能得到一些帮助:

Dim MonsterNum As Integer 
Dim strHowManyMonsters As String

MonsterNum = 1

For MonsterNum 1 to 99

    If (NOT strMonsterEssay like ("*Monster&Char(32)&'"MonsterNum + 1"'*") And strMonsterEssay like ("*Monster&Char(32)&'"MonsterNum"'*") Then strHowManyMonsters = "There are '"MonsterNum"' Monsters."

    Else: strHowManyMonsters = "There are no Monsters."
    
    End If

Next MonsterNum

【问题讨论】:

  • “怪物xx”不是连号吗?只能是《怪物3》和《怪物56》吗?
  • 如果我上面的问题的答案是肯定的并且只涉及上面的两个怪物,你需要知道怪物的数量(2)(比如“有2个怪物”),或者56(“最大的怪物数量”)?除此之外,同一个怪物编号会不会在大字符串中出现更多?

标签: vba loops for-loop ms-access


【解决方案1】:

试试这个

Dim MonsterNum As Integer
Dim strHowManyMonsters As String

strHowManyMonsters = "There are no Monsters."

For MonsterNum = 99 To 1 Step -1
  
    If strMonsterEssay Like "*[mM]onster " & MonsterNum & "*" Then
        strHowManyMonsters = "There are " & MonsterNum & " Monsters."
        Exit For
    End If
  
Next MonsterNum

注意使用[mM] 进行测试,使搜索不区分大小写。我认为像这样使用 VBA 的 Instr() 函数可能是一个更好的选择:

If InStr(1, strMonsterEssay, "Monster " & MonsterNum, vbTextCompare) > 0 Then

还要注意倒数。

【讨论】:

  • 超对称,谢谢!这正是我想要的。再次感谢! :)
【解决方案2】:

请使用下一个功能。如果所有现有的 'Monster' 字符串后跟不同的数字,则数字无关紧要。数Monster就够了。

Function CountMonsters(FullString As String, strMonster As String) As Long
    CountMonsters = UBound(Split(FullString, strMonster))
End Function

可以这样调用:

Sub testFindMonsters()
  Dim strMonsterEssay As String
  strMonsterEssay = "Monster 1 and Monster 2 goes to school. Monster 3 is waitting for the first two..."
  MsgBox "There are " & CountMonsters(strMonsterEssay, "Monster") & " Monsters."
End Sub

如果必须返回“最大怪物号”,同样的函数会这样调用:

Sub testMaxMonsterNumber()
   Dim MonsterNum As Long, strMonsterEssay As String, maxNo As Long, i As Long
   Dim strHowManyMonsters As String
    
   strMonsterEssay = "Monster 1 and Monster 2 goes to school. Monster 3 is waiting for the first two. However, Monster 1 and Monster 2 saw Monster 3 waiting and went a different way. Monster 3 waited for a long time for Monster 1 and Monster 2 but they never showed up"
    For i = 99 To 1 Step -1
        If CountMonsters(strMonsterEssay, "Monster " & i) > 0 Then
            maxNo = i: Exit For
        End If
    Next
    If maxNo > 0 Then
       MsgBox "There are " & maxNo & " Monsters."
    Else
       MsgBox "There are no Monsters."
    End If
End Sub

但是如果“怪物32正在等待前两个”,它会返回32。我问你连续怪物编号'规则',但你没有说...

【讨论】:

  • 我可能是错的,但我认为这个问题需要编号的怪物,比如怪物 1、怪物 76 等等,他们正在尝试计算出最大的怪物数量。我认为问题不是要计算“怪物”一词的出现次数。我又可能错了:)
  • @Super Symmetry: 像 "There are 25 Monsters" 这样的期望答案是什么意思?从这个意思出发,我只是觉得他的计数方式很“特殊”。但我也可能是错的...... :) 我问了一些事情来澄清这方面,但他什么也没说。
  • 使用您的示例:""Monster 1 and Monster 2 goes to school. Monster 3 is waitting for the first two. However, Monster 1 and Monster 2 saw Monster 3 waiting and went a different way. Monster 3 waited for a long time for Monster 1 and Monster 2 but they never showed up"。有多少怪物? :)
  • 我的理解是他想要最大的关联数,在上述情况下为 3。但是,如果我们计算“怪物”的出现次数,我们得到 9。
  • @超级对称:在这种情况下,当同一个怪物字符串可能出现多次时,我认为他必须说明这一点。但只有他才能澄清这一点。我也承认我可能错了……
猜你喜欢
  • 2012-10-28
  • 2015-12-15
  • 2014-10-11
  • 1970-01-01
  • 2021-03-22
  • 1970-01-01
  • 2020-08-29
  • 2011-06-18
  • 1970-01-01
相关资源
最近更新 更多