我已经被困了几天试图找出如何做到这一点。我想要做的是使用递归找到字符串中的最新字母,其中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
答案 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