Сравнить строку с массивом строк и вывести наиболее полные совпадения - 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
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д