Сравнить строку с массивом строк и вывести наиболее полные совпадения - Visual Basic .NET

Узнай цену своей работы

Формулировка задачи:

Доброго времени! Задачку решил на своем уровне знания, но код получился ППЦ тяжелый, некрасивый, и жрущий память. Помогите переделать/оптимизировать. Вводные данные: Есть строка, состоящая из нескольких слов (от 1 до 10). Есть массив из подобных строк. Есть слова-исключения. Задача: Сравнить исходную строку с каждой из массива, выбрать те, в которой совпадает максимальное количество слов, не учитывая слова-исключения. Мой код (постарался максимально откомментировать):

Решение задачи: «Сравнить строку с массивом строк и вывести наиболее полные совпадения»

textual
Листинг программы
Public one_str As String = "Вася ел бутерброд с маслом" ' строка для поиска
Public other_strings() As String = {
 "Петя ел кашу с маслом",
 "Вася кашу с маслом тоже ел",
 "Петя бутерброд с икрой уронил",
 "Вася бутерброд с маслом уронил",
 "Петя ел бутерброд с маслом"} 'массив строк в которых искать совпадения
Public iskl_word As String() = {"Вася", "Петя"} 'слова не участвующие в поиске, слова-исключения
Public str1 As String = "не найдено"
Private delim As Char = " "c
Private Sub Button2_Click(sender As System.Object, e As System.EventArgs) Handles Button2.Click
    Dim sPattern() As String = exWordDeletion(one_str, iskl_word).Split(delim)
    Dim nnS(other_strings.Length - 1) As Integer
    Dim sSource As String
    For i = 0 To other_strings.Length - 1
        sSource = exWordDeletion(other_strings(i), iskl_word)
        nnS(i) = sWordEqualCount(sSource, sPattern)
    Next
    MsgBox("Максимальное число совпадений = " & nnS.Max & vbCrLf & "в строке: " & other_strings(Array.IndexOf(nnS, nnS.Max)))
End Sub
Private Function exWordDeletion(ByVal sSrc As String, ByVal sEx As String()) As String
    Dim wSrc() As String = sSrc.Split(delim)
    Dim rz() As String = wSrc.Except(sEx).ToArray
    Return String.Join(delim, rz)
End Function
Private Function sWordEqualCount(ByVal sSrc As String, ByVal sPtn As String()) As Integer
    Dim wSrc() As String = sSrc.Split(delim)
    Dim rz() As String = wSrc.Intersect(sPtn).ToArray
    Return rz.Count
End Function

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

13   голосов , оценка 3.923 из 5
Похожие ответы