2016-10-06 3 views
0

Я разрабатываю программу, в которой вы можете ввести предложение, а затем искать слово. Затем программа сообщит вам, в каких положениях это слово происходит. Я написал код, но не знаю, как продолжить.Как указать позиции, в которых происходит слово в данном тексте?

Module Module1 


Sub Main() 
    Dim Sentence As String 
    Dim SentenceLength As Integer 
    Dim L As Integer = 0 
    Dim LotsofText As String = Console.ReadLine 


    Console.WriteLine("Enter your word ") : Sentence = Console.ReadLine 


    For L = 1 To LotsofText.Length 
     If (Mid(LotsofText, L, 1)) = " " Then 
     End If 
     L = L + 1 


     Dim TextCounter As Integer = 0 
     Dim MainWord As String = Sentence 
     Dim CountChar As String = " " 
     Do While InStr(MainWord, CountChar) > 0 
      MainWord = Mid(MainWord, 1 + InStr(MainWord, CountChar), Len(MainWord)) 
      TextCounter = TextCounter + 1 

      'Text = TextCounter + 2 
      ' Console.WriteLine(Text) 

     Loop 


     Console.WriteLine(TextCounter) 


     Console.Write("Press Enter to Exit") 
     Console.ReadLine() 


End Sub 


End Module 
+0

Середина, Instr и т. Д. Существуют только для совместимости с VB6 и VBA. Они никогда не должны использоваться. –

ответ

0

Чтобы найти только слова, а не суб-строку (например, игнорировать «кошку» в «кошачьем»):

Dim LotsofText = "catty cat" 
    Dim Sentence = "cat" 

    Dim pattern = "\b" & Regex.Escape(Sentence) & "\b" 
    Dim matches = Regex.Matches(LotsofText, pattern) 

    For Each m As Match In matches 
     Debug.Print(m.Index & "") ' 6 
    Next 

Если вы хотите, чтобы найти подстроки тоже можно удалить "\b" детали.

1

Преобразуйте этот фрагмент кода с C# на Visual Basic. match.Index будет указывать позицию данного слова.

var rx = new Regex("your"); 
foreach (Match match in rx.Matches("This is your text! This is your text!")) 
{ 
    int i = match.Index; 
} 
0

Если добавить эту функцию в код:

Public Function GetIndexes(ByVal SearchWithinThis As String, ByVal SearchForThis As String) As List(Of Integer) 
    Dim Result As New List(Of Integer) 

    Dim i As Integer = SearchWithinThis.IndexOf(SearchForThis) 

    While (i <> -1) 
     Result.Add(i) 
     i = SearchWithinThis.IndexOf(SearchForThis, i + 1) 
    End While 

    Return Result 
End Function 

И вызовите функцию в вашем коде:

Dim Indexes as list(of Integer) = GetIndexes(LotsofText, Sentence) 

Теперь GetIndexes найти все индексы слова, которое вы ищете в пределах предложение и поместить их в список индексов.