Найдите слово в строке, начало конкретной буквы и слово, конец той же буквы - PullRequest
0 голосов
/ 24 мая 2019

Учитывая строку со словами, разделенными проблемами, мне нужно найти, какое слово встречается раньше: которое начинается с буквы "k" или заканчивается "k"

Я пытался сделать это с операторами Mid и Len, но теперь мне нужно это с помощью Substring и Length

Sub uncorrect(ByVal s As String, ByRef res As String)
    Dim i As Integer
    Dim t, w As String
    s = s + " "
    w = ""
    For i = 1 To Len(s)
        t = Mid(s, i, 1)
        If t = " " Then
            If (Mid(w, 1, 1) = "k") Then
                res = "Word, begin with k"
                Exit Sub
            Else
                If (Mid(w, Len(w), 1) = "l") Then
                    res = "Word, end with k"
                    Exit Sub
                End If
            End If
            w = ""
        Else
            w = w + t
        End If
    Next
End Sub

Sub trying(ByVal s As String, ByRef res As String)
    Dim i As Integer
    Dim mass = s.Split(" ")
    For i = 0 To mass.Length - 1
        If mass(i).Substring(1, 1) = "k" Then
            res = "Word, begin with k"
            Exit For
        Else
            If mass(i).Substring(mass(i).Length - 1, 1) = "k" Then
                res = "Word, end with k"
                Exit For
            End If
        End If
    Next
End Sub

Фактический вывод очень нестабилен: или пустое текстовое поле результата, или ошибка

Ответы [ 2 ]

0 голосов
/ 24 мая 2019

Я создал функцию, используя Linq, которая возвращает List (Of String) со словами, соответствующими критериям.Я обрезал слова любой пунктуации и проверял с помощью String.StartsWith и String.EndsWith.В целях тестирования я распечатал результат в окне «Немедленно».

Private Function GetWords(input As String) As List(Of String)
    Dim words = input.Split(" "c)
    Dim Kwords = (From S In words
                  Let TrimmedS = S.Trim(New Char() {","c, "."c}) 'and whatever other puncuation you need to trim
                  Where TrimmedS.StartsWith("K", StringComparison.OrdinalIgnoreCase) OrElse TrimmedS.EndsWith("K", StringComparison.OrdinalIgnoreCase)
                  Select TrimmedS).ToList
    Return Kwords
End Function

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    Dim KWords = GetWords("The quick fox")
    Debug.Print("The quick fox")
    For Each w In KWords
        Debug.Print(w)
    Next
    Dim KWords1 = GetWords("Kick, scream, and knock out.")
    Debug.Print("Kick, scream, and knock out.")
    For Each w In KWords1
        Debug.Print(w)
    Next
End Sub

Результат:

The quick fox  
quick  
Kick, scream, and knock out. 
Kick 
knock
0 голосов
/ 24 мая 2019

Вам не нужно использовать подстроку, если вы просто хотите один символ.Вы можете получить символ, просто указав индекс со свойством по умолчанию.

Sub trying(ByVal s As String, ByRef res As String)
    Dim i As Integer
    Dim mass = s.Split(" "c)
    For i = 0 To mass.Length - 1
        If mass(i)(0) = "k"c Then
            res = "Word, begin with k"
            Exit For
        Else
            If mass(i)(mass(i).Length - 1) = "k"c Then
                res = "Word, end with k"
                Exit For
            End If
        End If
    Next
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...