Visual Basic使用递归查找最新的字母(按字母顺序)

时间:2014-02-25 13:32:24

标签: vb.net recursion

我已经被困了几天试图找出如何做到这一点。我想要做的是使用递归找到字符串中的最新字母,其中A是最早的,Z是最新的。

我知道递归不是最好的方法,但这是我给予的任务的一部分,所以我希望有人可以帮助我。

Private Function størstTegn(s As String) As String
        Dim j As Integer

        If s = "" Or s Is Nothing Then
            Return s
        Else
            Dim lengde As Integer = s.Length

            For i As Integer = 0 To lengde - 1
                If s(i) < s(j + i) Then
                    s.Remove(i)
                End If
            Next i
            Return s(0)
        End If
    End Function

3 个答案:

答案 0 :(得分:0)

你的方法是迭代的,而不是递归的。

Private Function GetMaxCharacter(ByVal ToEvaluate As String, CurrentMaxChar As String) As String
    If ToEvaluate.Length > 0 Then
        If ToEvaluate.Substring(0, 1) > CurrentMaxChar Then
            CurrentMaxChar = ToEvaluate.Substring(0, 1)
        End If
        ToEvaluate = ToEvaluate.Substring(1, ToEvaluate.Length - 1)

        CurrentMaxChar = GetMaxCharacter(ToEvaluate, CurrentMaxChar)
    End If

    Return CurrentMaxChar
End Function

答案 1 :(得分:0)

  

更新以避免特殊字符,例如¿,?,ñ,ç

...或者你可以使用LINQ

来完成
    Dim str As String = "qwerty012345"

    Dim BiggestLetter As Char = GetBiggestLetter(str)

    MessageBox.Show(CStr(BiggestLetter))

Private Function GetBiggestLetter(ByVal str As String) As Char

    Return (From c As Char In str.ToLower
            Where "abcdefghijklmnopqrstuvwxyz".Contains(c)
            Order By c Descending).FirstOrDefault

End Function

答案 2 :(得分:0)

您的代码存在一些问题。

您没有使用变量j,因此i + j始终等于i,因此不会从列表中删除任何内容。它总是返回字符串中第一个字符的值。

更大的问题是您尝试从正在迭代的列表中删除项目。这会弄乱你正在迭代的字符索引。如果按相反的顺序进行,则可以这样做,但不是必需的。

这不是一个递归问题,并且由于您尝试的解决方案也没有使用递归,我怀疑您对递归的误解。

只需要检查最高字符值的简单迭代:

Private Function størstTegn(s As String) As String
  Dim maxChar As Char
  For i As Integer = 0 To s.Length - 1
    If Char.IsLetter(s(i)) AndAlso s(i) > maxChar Then
      maxChar = s(i)
    End If
  Next
  Return maxChar.ToString
End Function