2016-09-29 3 views
0

Итак, я пытаюсь сделать приложение Windows Form в Visual Studio с помощью Visual Basic, в котором есть текстовое поле, в которое вы вводите предложение, другое текстовое поле, в которое вы можете ввести слово, которое находится в это предложение, затем кнопку, когда при нажатии на нее позиция (слова) слова, введенного в предложение, выводится на метку. В настоящий момент код подсчитывает вхождения слова, но я хочу его адаптировать, чтобы он учитывал позиции, в которых вместо этого встречается слово (например, «Привет привет привет» «привет», и выводится 1 2 3.Visual Basic подсчитывает позиции подстроки в строке

Текущий код ниже любую помощь будет оценено спасибо.

Public Class Form1 
    'first attempt not working 
    Private Sub button1_Click(sender As Object, e As EventArgs) Handles button1.Click 
     Dim input As String = textBox1.Text 
     Dim word As String = textBox2.Text 
     Dim occurrences As Integer = 0 

     Dim intCursor As Integer = 0 
     Do Until intCursor >= input.Length 
      Dim strCheckThisString As String = Mid(LCase(input), intCursor + 1, (Len(input) - intCursor)) 

      Dim intPlaceOfWord As Integer = In-Str(strCheckThisString, word) 
      If intPlaceOfWord > 0 Then 
       occurrences += 1 
       intCursor += (intPlaceOfWord + Len(word) - 1) 
      Else 
       intCursor = input.Length 
      End If 
     Loop 
     Positions.text = occurrences 
    End Sub 
End Class 
+1

Посмотрите на String.IndexOf, в частности, это перегрузка https://msdn.microsoft.com/en-us/library/7cct0x33(v=vs.110).aspx – tolanj

ответ

0

Если слова всегда разделены пробелами, вы могли бы сначала разбить строку на массив слов

Dim positions = New List(Of Integer)() 
Dim words As String() = input.Split() 
For i As Integer = 0 To words.Length - 1 
    If words(i).ToLower() = "hello" Then 
     positions.Add(i + 1) 
    End If 
Next 

теперь список positions содержит позиции приветственных слов внутри ntence.

У String.Split method есть перегрузки, позволяющие указать, например, другие разделители, такие как запятые. Также есть возможность удалить пустые записи.

+0

Итак, я попытался адаптировать свой код из этого, но я продолжаю получив сообщение System.Collections.Generic.List'1 (System.Int32), появившееся на моей метке, где должны быть выведены позиции. Любая идея почему? – bensy

+0

Public Class Form1 Private Sub button1_Click (отправитель As Object, е Как EventArgs) Ручки button1.Click – bensy

+0

Dim вход As String = TextBox1.Text Dim слово As String = textBox2.Text Dim positionsword = New List (Of Integer)() Dim words As String() = input.Split() Для i As Integer = 0 К словам.Length - 1 Если слова (i) .ToLower() = textBox2.Text Затем positionword.Add (i + 1) Конец Если Следующий Позиции.Текст = позицииword.ToString End Sub End Class – bensy

Смежные вопросы